节点Js:单个路由器文件中的多个路由

时间:2017-07-14 12:10:28

标签: node.js express

我们可以在单个路由器文件中定义多个路由。 例如:考虑我们有公司和用户选项卡,我想为每个选项卡定义1个路由器文件。所有公司相关的呼叫都应由公司路由器处理,用户相关的呼叫应由用户路由器处理。

//app.js
app.use('/', require('./routes/user'));
app.use('/api/user/load_user_list', require('./routes/user'));
app.use('/api/user/get_user_detail', require('./routes/user'));

//User.js router
var express = require('express');
var router = express.Router();

//router 1
router.get('/', function (req, res, next) {
    //do something here - 
});

//router 2
router.get('/api/user/load_user_list', function (req, res, next) {
    //do something here
});

//router 3
router.get('/api/user/get_user_detail', function (req, res, next) {
    //do something here
});
module.exports = router;

目前,当app收到'/ api / user / load_user_list'的电话时,我的“路由器1”被调用。

我错过了什么。为了解决这个问题,我想我可以根据请求baseUrl进行单个路由器调用并委托给不同的函数。

任何帮助/建议将不胜感激..谢谢

2 个答案:

答案 0 :(得分:1)

而不是:

app.use('/', require('./routes/user'))
app.use('/api/user', require('./routes/user'));

只需使用:

//router 2
router.get('/load_user_list', function (req, res, next) {
    //do something here
});

//router 3
router.get('/get_user_detail', function (req, res, next) {
    //do something here
});

在你的路由器文件中重命名路由如下:

 if (ContextCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(InterviewListActivity.this,
                new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_FINE_LOC);
    }

    if (ContextCompat.checkSelfPermission(context,
            Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(InterviewListActivity.this,
                new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_CODE_COARSE_LOC);
    }

    if (ContextCompat.checkSelfPermission(context,
            Manifest.permission.LOCATION_HARDWARE) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(InterviewListActivity.this,
                new String[]{Manifest.permission.LOCATION_HARDWARE}, REQUEST_CODE_LOC_HRD);
    }

原因: 当app.use('/ api / user / xyz',require('./ xyz'))被调用时,api / user / xyz之后的uri路径被发送到要匹配的路由器

答案 1 :(得分:0)

这里发生的事情是,由于您在/api/user/load_user_list中输入了app.use('/api/user/load_user_list', require('./routes/user'));,因此 express将在./routes/user中的所有路由前面加上{{1} }。

您的/api/user/load_user_list中的/ 路由器1 变成user.js中的/api/user/load_user_list + //api/user/load_user_list成为user.js(来自app.js)+ /api/user/load_user_list

因此,只有当您按下/api/user/load_user_list时,您的路由器2 才会被呼叫。

您可以将app.js代码更改为

/api/user/load_user_list/api/user/load_user_list

和您的app.use('/api/user', require('./routes/user'));

routes/user.js

现在,当您点击//router 1 router.get('/', function (req, res, next) { //do something here - }); //router 2 router.get('/load_user_list', function (req, res, next) { //do something here }); //router 3 router.get('/get_user_detail', function (req, res, next) { //do something here }); 时,它将匹配/api/user/load_user_list(app.js)+ /api/user(routes / user.js),并会调用您想要的路由。