閱讀很多類似的線程後,我沒能看到我的問題的原因...在POST發送無req.body請求
我試着去了解如何創建一個RESTful API和節點,並表示4,漂亮基本和簡單,但是當我嘗試用POST請求保存我的文檔時,請求上沒有發送req.body,我有一些問題。
讓我們看一小塊代碼:
module.exports = (router, Bear) ->
router.route '/bears'
.get (req, res) ->
Bear.find (err, bears) -> if err then err else res.json bears
.post (req, res) ->
newBear =
_id: req.body.bearId
nombre: req.body.nombre
bear = new Bear(newBear)
bear.save (err) ->
if err then res.send err
# res.json msg: "#{bear.nombre}, creado"
res.json msg: "created"
到目前爲止,這是我的基本路線的配置(現在)。服務器是:
express = require 'express'
app = express()
morgan = require 'morgan'
bodyParser = require 'body-parser'
mongoose = require 'mongoose'
app.use bodyParser.urlencoded extended: true
app.use bodyParser.json()
app.use morgan 'dev'
require('./app/config/js/database')(mongoose)
router = express.Router()
Bear = require './app/models/js/bear'
router.get '/', (req, res) -> res.json msg: 'It works'
require('./app/routes/js/bears')(router, Bear)
app.use '/api', router
port = 8080
app.listen(port)
console.log("Corriendo en #{port}")
和代碼的其他部分都沒有與此有關(我認爲),所以,當我使用郵遞員或捲曲發送一個請求,我總是得到一個{}
響應和崩潰的消息我的服務器:
home/nano/Dev/bears/node_modules/mongoose/lib/utils.js:413
throw err;
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
at ServerResponse.header (/home/nano/Dev/bears/node_modules/express/lib/response.js:662:10)
at ServerResponse.send (/home/nano/Dev/bears/node_modules/express/lib/response.js:146:12)
at ServerResponse.json (/home/nano/Dev/bears/node_modules/express/lib/response.js:235:15)
at Promise.<anonymous> (/home/nano/Dev/bears/app/routes/js/bears.js:22:20)
at Promise.<anonymous> (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:172:8)
at Promise.emit (events.js:95:17)
at Promise.emit (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
at Promise.reject (/home/nano/Dev/bears/node_modules/mongoose/node_modules/mpromise/lib/promise.js:111:15)
at Promise.error (/home/nano/Dev/bears/node_modules/mongoose/lib/promise.js:95:15)
真的我不知道我真的不知道該怎麼做,我已經整個下午,並在這個夜晚。
嗯,我在代碼中進行了更改,現在回溯消失了,但請求仍然是空的。
module.exports = (router, Bear) ->
router.route '/bears'
.get (req, res) ->
Bear.find (err, bears) ->
if err then return res.send err
res.json bears
.post (req, res) ->
newBear =
_id: req.body.bearId
nombre: req.body.nombre
bear = new Bear(newBear)
bear.save (err) ->
if err then return res.send err
res.json msg: "created"
的JS代碼:
(function() {
module.exports = function(router, Bear) {
return router.route('/bears').get(function(req, res) {
return Bear.find(function(err, bears) {
if (err) {
return res.send(err);
}
return res.json(bears);
});
}).post(function(req, res) {
var bear, newBear;
newBear = {
_id: req.body.bearId,
nombre: req.body.nombre
};
bear = new Bear(newBear);
return bear.save(function(err) {
if (err) {
return res.send(err);
}
return res.json({
msg: "created"
});
});
});
};
}).call(this);
我通過RESTClient實現發送請求的Firefox,捲曲,郵遞員......內容類型頭是Content-Type: application/json; charset=utf-8
你能指出棧跟蹤中的相關行是在哪裏嗎?例如,'bears/app/routes/js/bears.js:22'。 – 2014-10-07 03:06:26
我不熟悉** CoffeeScript **,所以我不能發表一個例子。但它似乎查詢有錯誤,並且如果err然後res.send err正在執行。然後'res.json msg:「created」'也被執行。在這種情況下,你需要在** CoffeeScript **中使用'return'嗎?也可能想先查看是否實際存在錯誤。 – Jordonias 2014-10-07 03:23:24
用於查看第22行的+1 – xShirase 2014-10-07 03:51:23