我一直在尝试让一个简单的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);
});
});
还有一些
- 用CCD_ 8代替CCD_
- 使用箭头函数而不是
function(req, res)