Node、express、Monk,mongodb:post 请求出现 400 错误请求错误。为什么会出现此错误?
Node, express, Monk, mongodb: 400 bad request error on post request. Why am I getting this error?
我一直在尝试获得一个具有 CRUD 功能的简单 nodejs API。我正在使用 express 和 'monk' 包与 mongodb 进行通信。我已经通过 GET 请求成功提取数据。
我无法使 post() 函数正常工作。当从每次调用时插入文档的 GET 请求调用插入请求时,我能够将新文档插入 mongo。但是,无论我做什么,有或没有实际的插入请求,我的 post 都会返回 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;
我真的不知道为什么单个 post 请求返回 400。我认为这是我的主文件的问题,但它几乎没有从最初的 express 生成的文件中改变。
你if
条件错误。 !(req.body.job || req.body.code || req.body.hours)
应该是 !(req.body.job && req.body.code && req.body.hours)
.
你确定你真的有 post 东西吗?检查您的请求的 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);
});
});
更多
- 将
var
替换为 const
.
- 使用箭头函数代替
function(req, res)
。
我一直在尝试获得一个具有 CRUD 功能的简单 nodejs API。我正在使用 express 和 'monk' 包与 mongodb 进行通信。我已经通过 GET 请求成功提取数据。
我无法使 post() 函数正常工作。当从每次调用时插入文档的 GET 请求调用插入请求时,我能够将新文档插入 mongo。但是,无论我做什么,有或没有实际的插入请求,我的 post 都会返回 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;
我真的不知道为什么单个 post 请求返回 400。我认为这是我的主文件的问题,但它几乎没有从最初的 express 生成的文件中改变。
你if
条件错误。 !(req.body.job || req.body.code || req.body.hours)
应该是 !(req.body.job && req.body.code && req.body.hours)
.
你确定你真的有 post 东西吗?检查您的请求的 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);
});
});
更多
- 将
var
替换为const
. - 使用箭头函数代替
function(req, res)
。