我正在使用express.js构建REST API。
我的API需要提供所有端点来对“用户”进行CRUD,所以到目前为止我有以下内容:
app.get('/users', getAllUsers); // get all users
app.post('/users', createUser); // create a new user
app.put('/users', updateUser); // update a user
app.delete('/users', deleteUser); // delete a user
但是,获得单个用户是一个很好的实践终点吗?
理想情况下,如果你在/users/1234
上获取,我应该只返回 ID为1234的用户,但如果我只是/users
我应该返回所有用户,因为未检测到ID
我如何重构我的:
app.get('/users', getAllUsers);
处理这两种情况?
答案 0 :(得分:5)
您可以创建更高级别的路由器,然后在其上调用app.use()
/ router.use()
。这是Express documentation中推荐的方法。
var express = require('express');
var app = express();
var usersRouter = express.Router();
usersRouter.get('/', function(req, res) {
res.send('Got all users');
});
usersRouter.get('/:id', function(req, res) {
res.send('Got user ' + req.params.id);
});
app.use('/users', usersRouter);
答案 1 :(得分:1)
您不能,最佳做法是尽可能地隔离您的路线操作。要获得单个id,这样的路由必须只获取该数据。 实施例。
var router = express.Router();
router.route('some/route/id/123').get(function(req,res){
console.log('id');
});
router.route('some/route/all').get(function(req,res){
console.log('all');
});
答案 2 :(得分:1)
你可以通过提供id作为可选参数并在控制器函数中检查
来实现例如。
app.get('/users/:id?', getAllUsers);
但我更愿意采用单一责任原则
app.get('/users', getAllUsers);
app.get('/users/:id', getUser);