REST API和Node newbie here。我试图在nodejs中创建REST API。每个用户都能够获得与其用户ID相关联的项目,并且认证机制显然与URL是分开的。我正在使用类似以下服务的东西。
/ API /用户/的用户ID
/ api / users / 用户ID / cars / carid
我希望将来有其他类似于第二个的API。
问题是如何绑定'干净的userid
和carid
或houseid
参数。我希望能够有一个中间步骤来捕获用户ID' users.js文件中的参数然后它将请求委托给其他组件。我希望这将允许我更简洁的身份验证检查,但可能有更好的方法。现在的问题是userid
保证是唯一的,但carid
和houseid
仅对每个用户唯一,因此我需要两个值来检索数据。
我的问题是如何实现这一目标或是否有更好的方法来组织此操作,以便在验证用户是否可以访问该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进行调试。
答案 0 :(得分:1)
你不一定需要写出这样的完整路线,你可能想要研究的是嵌套路线,我认为这会有所帮助。
Rest with Express.js nested router
这里有一个很好的例子,当我构建我的第一个api时,我开始使用它。
答案 1 :(得分:0)
根据评论者的建议,我决定以/users/:user_id/cars/:car_id
的形式直接写到汽车api的路线。