Node,express,Monk,mongodb:400请求错误.为什么我会出现这个错误



我一直在尝试让一个简单的nodejs API使用CRUD功能。我使用express和"monk"包与mongodb进行通信。我已经通过GET请求成功地提取了数据。

我无法使post()函数工作。当从每次调用插入文档的GET请求调用插入请求时,我可以将新文档插入mongo。然而,无论我做什么,无论是否有实际的插入请求,我的帖子都会返回400。

这是我的路线文件:

var express = require('express');
var router = express.Router();
/* GET hours page. (for users to submit hours) */
router.get('/', function (req, res) {
    var db = req.db;
    var collection = db.get('entries');
    collection.find({}, /*{limit:20}, */function (err, docs) {
        if (err) {
            console.log('couldn't load entries');
        }
        res.json(docs);
    });
});
/* POST hours page. (for users to submit hours) */
router.post('/', function (req, res) {
    if (!(req.body.job || req.body.code || req.body.hours)) {
        handleError(res, 'Invalid user input', 'Must complete input', 400);
    }
    var db = req.db;
    var collection = db.get('entries');
    var newEntry = req.body;
    collection.insert(newEntry, function (err, docs) {
        if (err){
            handleError(res, err.message, 'Failed to create new entry');
        }
        res.json(docs);
    });
});
module.exports = router;

我真的不知道为什么每次发帖请求都会返回400。我认为这是我的主文件的问题,但它与最初的express生成的文件相比几乎没有更改。

您的if条件错误。!(req.body.job || req.body.code || req.body.hours)应该是!(req.body.job && req.body.code && req.body.hours)
你确定你真的发布了什么吗?检查您的请求的Content-Type,它应该是application/x-www-form-urlencoded;
我建议使用supertest来测试您的应用程序。用法非常简单。

import request = require("supertest");
import should = require("should");
import app = require("../youApp");
describe("POST /foo", () => {
  it("should post something", done => {
    request(app)
        .post("/foo")
        .send({job: "my job", code: "...", "hours"})
        .expect(200, done);
  });
});

还有一些

  1. 用CCD_ 8代替CCD_
  2. 使用箭头函数而不是function(req, res)

最新更新