在nodejs中的rest apis中添加前缀

时间:2017-08-19 06:55:32

标签: javascript node.js

我有一个server.js文件,其中我需要services.js进一步要求所有其他API文件

require('./web_services/services')(app);

我有另外两个文件Users.jsEvents.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

但这不起作用?我错过了什么吗?

1 个答案:

答案 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样板,我前一段时间使用快递和快递路由器。一些命名约定并不好,但是你可以看到如何在样板中定义和使用路由器来为特定路由启用路由前缀和中间件。