express.js API端点最佳实践CRUD

时间:2017-03-01 02:01:16

标签: node.js express

我正在使用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);

处理这两种情况?

3 个答案:

答案 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);