使用ExpressJS和Nodejs构建REST API - POST和PUT操作问题

时间:2014-09-25 20:02:11

标签: node.js api google-chrome rest express

我正在尝试使用Nodejs和Express4实现内存中的REST API。

我可以通过ID列出用户和获取用户。但是,我遇到了POST操作的麻烦。

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

以下是我如何使用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测试POST?我在哪里指定要发送的JSON?

1 个答案:

答案 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'。