使用application / vnd的supertest请求中的空体

时间:2015-04-06 17:36:38

标签: json node.js express supertest

我在超级帖子中发送请求正文时遇到了很多麻烦。我已经阅读了其他问题的解决方案,这些问题归咎于正文解析器的不正确配置,但这些答案指的是自定义数据类型。 (res.body is empty in this test that uses supertest and Node.js)。我像这样配置body-parser:

var bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb', type: 'application/vnd.api+json' }));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));

我提供的帖子的解决方案说“supertest使用this文件来确定你是否正在发送json。”我的内容类型实际列在那里,所以我不明白为什么这应该是一个问题。

我试图发布这样的请求:

it ('creates user', function (done) {
    var user = {
      firstname: 'Joe',
      lastname: 'JoeJoe',
      email: 'joe@joe.com',
      password: 'spartacus',
    };

    request(app)
      .post('/api/users')
      .send(user)
      .expect(200)
      .expect('Sent email to joe@joe.com', done)
  });
});

我用这一行导入我的应用程序:

var app = require('../server.js');

server.js完全配置我的应用程序。 supertest是否支持此应用程序类型?有没有办法强制用户数据作为req.body的一部分被注意到?

1 个答案:

答案 0 :(得分:0)

我认为可以通过将content-type请求的post标题设置为application/vnd.api+json来解决此问题。您可以在supertest / superagent中执行以下操作:

it ('creates user', function (done) {
    var user = {
      firstname: 'Joe',
      lastname: 'JoeJoe',
      email: 'joe@joe.com',
      password: 'spartacus',
    };

    request(app)
      .post('/api/users')
      .set('Content-Type', 'application/vnd.api+json')
      .send(user)
      .expect(200)
      .expect('Sent email to joe@joe.com', done)
  });
});