委托请求时,Node.js / Express req.params被清除

时间:2015-02-08 15:28:58

标签: node.js rest express

REST API和Node newbie here。我试图在nodejs中创建REST API。每个用户都能够获得与其用户ID相关联的项目,并且认证机制显然与URL是分开的。我正在使用类似以下服务的东西。

/ API /用户/的用户ID
/ api / users / 用户ID / cars / carid

我希望将来有其他类似于第二个的API。

问题是如何绑定'干净的useridcaridhouseid参数。我希望能够有一个中间步骤来捕获用户ID' users.js文件中的参数然后它将请求委托给其他组件。我希望这将允许我更简洁的身份验证检查,但可能有更好的方法。现在的问题是userid保证是唯一的,但caridhouseid仅对每个用户唯一,因此我需要两个值来检索数据。

我的问题是如何实现这一目标是否有更好的方法来组织此操作,以便在验证用户是否可以访问该API时简化可重复使用的代码。如果这是非常类似的,请纠正我。

我有以下代码:

app.js

var express = require('express');
var app = express();
app.use('/api', require('./routes/api'));
var server = app.listen(3000, function() {
    var host = server.address().address;
    var port = server.address().port;

    console.log('The server is up at ' + host + ':' + port);
});

./路由/ api.js

var express = require('express');
var router = express.Router();

/* GET api listing. */
router.get('/', function(req, res, next) {
    res.send('Base of our APIs');
});

router.use('/users', require('./users.js'));

router.use('/', function(req, res) {
    res.send('Unauthorized api access. Not authorized for ' + req.baseUrl);
})



module.exports = router;

./路由/ users.js

var express = require('express');
var router = express.Router();

router.use('/:user_id/cars', function(req, res, next) {
    console.log('Userid is:' + req.params.user_id);
    // Authenticate a user here before sending to the next page
    var cars_api = require('./cars.js');
    cars_api(req, res, next);
});

module.exports = router;

./路由/ cars.js

var express = require('express');
var router = express.Router();

/* GET cars for user */
router.get('/', function(req, res, next) {
  res.send('Retrieving all cars for user ' + req.params.user_id);
});

router.get('/:car_id', function(req, res, next) {
    res.send('Retrieving car with car_id ' + req.params.car_id + ' and user id ' + req.params.user_id);
});

module.exports = router;

我已经尝试了几种其他方式来调用汽车API,其中所有req.params值都被清除。我正在使用WebStorm进行调试。

2 个答案:

答案 0 :(得分:1)

你不一定需要写出这样的完整路线,你可能想要研究的是嵌套路线,我认为这会有所帮助。

Rest with Express.js nested router

这里有一个很好的例子,当我构建我的第一个api时,我开始使用它。

答案 1 :(得分:0)

根据评论者的建议,我决定以/users/:user_id/cars/:car_id的形式直接写到汽车api的路线。