我正在尝试使用Nodejs和Express4实现内存中的REST API。
我可以通过ID列出用户和获取用户。但是,我遇到了POST操作的麻烦。
编辑:正如评论中所建议的那样,我现在使用req.body来传递请求中收到的JSON数据,但是" null"被添加到我的数组而不是JSON数据。我不确定这是我的代码中的问题还是由于我使用Postman的方式。
以下是我如何使用Postman发送数据** (我在最后一个值后删除了逗号:)**:
以下是我的代码:
user.js的
var users = [{"id": "1", "firstName": "John", "lastName": "Doe"}];
exports.getAllUser = function() {
return users;
};
exports.getUserById = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) return users[i];
}
};
exports.deleteUser = function(id) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) {
users.splice(i,1);
}
}
}
exports.updateUser = function(id, json) {
for (var i = 0; i < users.length; i++) {
if (users[i].id == id) {
users.splice(i, 1, json);
}
}
}
exports.addUser = function(json) {
users.push(json);
}
server.js
var express = require('express');
var users = require('./user');
var app = express();
var port = process.env.PORT || 8080;
var router = express.Router();
router.use(function(req, res, next) {
console.log('%s %s', req.method, req.path);
next();
});
router.get('/users', function(req, res, next) {
res.json({ users: users.getAllUser() });
});
router.get('/users/:id', function(req, res, next) {
var user = users.getUserById(req.params.id)
res.json(user);
});
router.put('/users/:id', function(req, res, next) {
users.updateUser(req.params.id, req.body);
});
router.delete('/users/:id', function(req, res, next) {
users.deleteUser(req.params.id);
});
router.post('/users', function(req, res, next) {
users.addUser(req.body);
});
// Only requests to /api/ will be send to router.
app.use('/api', router);
app.listen(port);
console.log('Server listening on port ' + port);
关于POST,我应该如何将JSON从请求传递给数组?我想这个问题的答案也可以帮助我执行PUT(更新)。我会有2个参数,一个是ID,另一个是JSON数据?
此外,如何使用Postman测试POST?我在哪里指定要发送的JSON?
答案 0 :(得分:0)
当您在http正文中发送json时,无论http方法如何,都应设置正确的http Content-Type标头。在json的情况下,它是'application / json'。你应该在postman中添加这个标题。 此标头表示接收到的请求的http主体具有有效的json序列化字符串。 要自动解析http正文,您可以使用https://github.com/expressjs/body-parser之类的中间件。此中间件尝试根据“Content-Type”标头解析收到的http正文 - 在您的情况下为json。如果这个表达中间件成功将主体解析为json,则用它填充'req.body'。