Node.js 400错误的请求

时间:2018-08-17 04:20:52

标签: node.js mongodb mongoose supertest

在尝试发布到mongo数据库时,我陷入了400错误的请求,不知道代码出了什么问题。

这是猫鼬的结构:

var exp = mongoose.model('Exp', {
    _creator: {
        type: mongoose.Schema.Types.ObjectId,
        required: true
    },

    exps: [{
        description: {
            type: String,
            required: true
        },
        skillId: {
            type: mongoose.Schema.Types.ObjectId,
            required: true
        }
    }]

});

这是我的测试用例结构,也是我想要存储数据的方式:

const exp = {
    _creator: UserOneId, // an ObjectID
    exps:[{
        description: "Ate an apple",
        skillId: SkillOneId // an ObjectID
    },{
        description: "Took a shower",
        skillId: SkillTwoId // an ObjectID
    }],

};

exp部分应该是一个数组,以允许存储多个exp,每个exp都有一个描述和一个技能ID。

下面是我的POST函数:

app.post('/exps', authenticate, (req, res) => {

  var exp = new Exp({
    _creator: req.user._id, // got from suthenticate middleware
    exps: req.body.exps
  });
  exp.save().then(() => {
    res.send(exp);
  }, (e) => {
    res.status(400).send(e);
  });

})

和我的测试用例:

describe('POST /exps', () => {
    it('Should create new exp', (done) => {
        request(app)
            .post('/exps')
            .set('x-auth', users[0].tokens[0].token)
            .send(exps)
            .expect(200)
            .end(done);
    })
});

使用这样的结构,我只是想不出是什么原因使我这里未提及的400个中间件和变量与其他测试用例一起传递的,所以我认为不是这些。

测试中的错误消息如下:

1) POST /exps Should create new exp:
 Error: expected 200 "OK", got 400 "Bad Request"
  at Test._assertStatus (node_modules/supertest/lib/test.js:250:12)
  at Test._assertFunction (node_modules/supertest/lib/test.js:265:11)
  at Test.assert (node_modules/supertest/lib/test.js:153:18)
  at Server.assert (node_modules/supertest/lib/test.js:131:12)
  at emitCloseNT (net.js:1552:8)
  at _combinedTickCallback (internal/process/next_tick.js:77:11)
  at process._tickCallback (internal/process/next_tick.js:104:9)

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

啊,找到了。这是POST功能中的错字。