2014-09-25 87 views
3

我试图使用Nodejs和Express4实现内存中的REST API。使用ExpressJS和Nodejs构建REST API - POST和PUT操作问题

我没有问题列出用户和通过id获取用户。但是,我在POST操作中遇到了麻烦。

编辑:正如评论中所建议的那样,我现在使用req.body传递请求中接收到的JSON数据,但将“null”添加到我的数组中,而不是JSON数据。我不确定这是否是我的代码中的问题,或者是由于我使用Postman的方式。

下面是我如何使用邮差发送数据** (我已删除的最后一个值后的逗号:)**: enter image description here

下面是我的代码:

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邮政?我在哪里指定要发送的JSON?

+2

由于它是一个POST,我假设json负载进入http请求的主体,你有没有看过使用body-parser来检索数据? – ckross01 2014-09-25 20:25:05

+1

'req.body'应该包含您发布到服务器的对象。 – 2014-09-25 20:26:10

+0

@DavinTryon - 我已更新我的代码以反映您建议的更改,使用req.body传递正在发送的json数据。但是,“null”被添加到数组中。 – dukable 2014-09-25 20:37:51

回答

0

当您在http正文中发送json时,应该设置正确的http Content-Type标头,而不管http方法。在json的情况下,它是'application/json'。您应该在邮递员中添加此标头。 这个头信号表明接收到的请求的http正文有一个有效的json序列化字符串。 要自动解析http正文,您可以使用中间件,如https://github.com/expressjs/body-parser。这个中间件试图根据“Content-Type”头解析接收到的http正文 - 在你的情况下是json。如果这个高级中间件成功地将body解析为json,它会用它填充'req.body'。

相关问题