我有一个server.js
文件,其中我需要services.js
进一步要求所有其他API文件
require('./web_services/services')(app);
我有另外两个文件Users.js
和Events.js
来保存实际的api。 services.js
需要两个文件
var logger = require("../logger/logger");
module.exports = function (app) {
require('./User/Users')(app,logger);
require('./Event/Events')(app,logger);
// in case of api error
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.send({ 'status': res.status, 'message': err });
logger.error(err);
});
}
现在,我希望在用户apis之前加/users
前缀,在活动apis之前加events/
。
我试过了
app.use('/user/', require('./User/Users')(app));
Users.js
module.exports = function (app, logger) {
// apis
};//exports
但这不起作用?我错过了什么吗?
答案 0 :(得分:3)
我相信您可以使用express routing
解决您的问题您可以在service.js
中初始化路由器,然后传递它以启用其中的路由和中间件,并且可以像您尝试的那样在服务文件中定义前缀。
// service.js
var express = require('express')
var router = express.Router();
...
app.use('/users', require('./User/Users')(router, logger));
app.use('/events', require('./Event/Events')(router, logger));
...
此文件中的所有路由都将以/users
作为前缀,因为我们已在服务文件中提及它。
// Users.js
module.exports = function (router, logger) {
// middleware that is specific to this router
router.use(function timeLog (req, res, next) {
logger('users middleware', req); // or however you are using your logger
next();
})
// this route will be `/user/`
router.get('/', function (req, res) {
res.send('Users home page')
})
// this route will be `/users/about`
router.get('/about', function (req, res) {
res.send('About users')
})
return router;
};//exports
我猜这很直接。您可以参考this样板,我前一段时间使用快递和快递路由器。一些命名约定并不好,但是你可以看到如何在样板中定义和使用路由器来为特定路由启用路由前缀和中间件。