[英]Error when doing post with express JS
我正在測試post方法來創建待辦事項,如下所示。 我在chrome中使用郵遞員來模擬post方法調用。 但是,它不起作用,並給我以下錯誤。 我懷疑主體解析器庫的工作方式有問題。 我在這里做錯了什么?
1 SyntaxError: Unexpected token b
2: at parse (/Users/zack/mydrive/proj/express-demo/node_modules/body-parser/lib/types/json.js:83:15)
3: at /Users/zack/mydrive/proj/express-demo/node_modules/body-parser/lib/read.js:116:18
4: at invokeCallback (/Users/zack/mydrive/proj/express-demo/node_modules/body-parser/node_modules/raw-body/index.js:262:16)
5: at done (/Users/zack/mydrive/proj/express-demo/node_modules/body-parser/node_modules/raw-body/index.js:251:7)
6: at IncomingMessage.onEnd (/Users/zack/mydrive/proj/express-demo/node_modules/body-parser/node_modules/raw-body/index.js:308:7)
7 at IncomingMessage.emit (events.js:104:17)
8 at _stream_readable.js:908:16
碼:
var express = require('express');
var app = express();
var handlebars = require('express-handlebars');
var bodyParser = require('body-parser');
//MIDDLEWARE
app.engine('handlebars', handlebars({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}));
// TODOS
var todos = [
{ body: "take out the trash",completed: false},
{ body: "Do the laundry",completed:true},
{ body: "Make a screencast",completed:false}
]
app.post('/todos', function (req, res){
console.log("todo:", req.body);
var todo = req.body;
console.log("todo:"+todo);
todos.push(todo);
res.status(200).json(todo);
res.send('OK')
})
此外,我觀察到問題出在此行上。
app.use(bodyParser.json());
您確定要以JSON格式發送請求嗎? 確保已在Postman- https: //imgur.com/j0M7TEX中選擇了它。
如果那沒有用,您可以嘗試以下方法-
...
app.post('/todos', function (req, res){
console.log("todo:", req.body);
var todo = req.body;
console.log("todo:"+todo);
todos.push(todo);
// Only try to send a single response.
res.json(todo);
});
看來您正在嘗試發送兩個響應,一個包含JSON,另一個包含文本/純文本('Ok')。
似乎您的程序正在嘗試將post數據解釋為json數據-並在嘗試解析可能是url編碼的請求數據時生成錯誤。
也許考慮以json格式發送數據。 您將必須設置請求標頭以指示數據類型為json。 請參見以下答案以獲取示例:
我剛剛在郵遞員中創建了一個新會話,它開始工作。 我不確定是否有緩存效果,但現在可以使用。 我根本沒有進行任何代碼更改。 現在將其發布為解決方案。
只是不要在JSON值上加上引號。
不是“ okay2”,而是okay2 。
我認為郵遞員會根據需要自己添加引號,在這種情況下,將創建無效的JSON“ okay2”。
順便說一下,您可以通過單擊“行”單選按鈕進行測試並編寫自己的JSON。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.