我有一个 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);
});
}
现在我想在用户 api 之前加上前缀 /users
,在事件 api 之前加上前缀 events/
。
我试过了
app.use('/user/', require('./User/Users')(app));
Users.js
module.exports = function (app, logger) {
// apis
};//exports
但这不起作用?我错过了什么吗?
最佳答案
我相信您可以使用 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样板文件,我前一段时间使用 express 和 express router 制作的。有些命名约定不好,但是是的,您可以看到路由器是如何在样板中定义和使用的,以便为特定路由启用路由前缀和中间件。
关于javascript - 在nodejs中的rest apis中添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45768662/