2016-05-09 58 views
0

我一直在试图获得一个简单的nodejs API与CRUD功能工作。我使用express,和'monk'包与mongodb进行通信。我已经成功使用GET请求拉取数据。Node,express,Monk,mongodb:发送请求时400错误请求错误。为什么我得到这个错误?

我无法获得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.我认为这是我的主文件的问题,但它几乎没有从最初的快速生成的文件改变。

+0

原来这段代码工作得很好。出于某种原因,我认为在我的文章中发送原始JSON而不是x-www-form-urlencoded会很明智。 – matthewninja

回答

0

You 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. const取代var
  2. 使用箭头功能代替function(req, res)
+0

感谢您的回复!我试图完全删除此块。我认为问题不在于代码本身 - 我已经尝试了一切,包括完全删除所有代码。我正在使用POSTMAN发布帖子。我将原始JSON发送到正确的地址。即使有一个空白的帖子,它错误400s。 – matthewninja