简体   繁体   English

在nodejs中的rest apis中添加前缀

[英]Add prefix in rest apis in nodejs

I have a server.js file in which I have required services.js that further requires all the other API files 我有一个server.js文件,其中我需要services.js ,它还需要所有其他API文件

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

I have two other files Users.js and Events.js that holds the actual apis. 我有另外两个文件Users.jsEvents.js ,它们保存着实际的api。 The services.js require both the files 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);
    }); 
}

Now I want to prefix /users before users apis and events/ before event apis. 现在我想在用户apis和events/事件apis之前添加前缀/users I have tried 我努力了

app.use('/user/', require('./User/Users')(app));

Users.js Users.js

module.exports = function (app, logger) {
    // apis
};//exports

but this is not working? 但这不起作用? Am i missing something? 我错过了什么吗?

I believe you can solve your problem by using express routing 我相信您可以使用快速路由解决您的问题

You can initialize router in service.js and then pass it around to enable routes and middleware in it and can define prefix in it in the service file as you were trying to do. 您可以在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));
...

All the routes in this file will be prefixed by the /users because we have mentioned it in the service file. 此文件中的所有路由都将以/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

It's pretty straight forward I guess. 我猜这很直接。 You can refer this boilerplate, I made a while back ago using express and express router. 您可以参考这个样板,我前一段时间使用快递和快递路由器。 Some naming convention is not good but yeah you can see how the router is defined and used in the boilerplate to enable route prefixing and middleware for specific routes. 一些命名约定并不好,但是你可以看到如何在样板中定义和使用路由器来为特定路由启用路由前缀和中间件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM