2016-05-09 80 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