updated with interface based on express.js