簡體   English   中英

使用Express JS發布時出錯

[英]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')。

http://expressjs.com/fr/api.html#res.json

似乎您的程序正在嘗試將post數據解釋為json數據-並在嘗試解析可能是url編碼的請求數據時生成錯誤。

也許考慮以json格式發送數據。 您將必須設置請求標頭以指示數據類型為json。 請參見以下答案以獲取示例:

Angular JS POST請求未發送JSON數據

我剛剛在郵遞員中創建了一個新會話,它開始工作。 我不確定是否有緩存效果,但現在可以使用。 我根本沒有進行任何代碼更改。 現在將其發布為解決方案。

只是不要在JSON值上加上引號。

不是“ okay2”,而是okay2

我認為郵遞員會根據需要自己添加引號,在這種情況下,將創建無效的JSON“ okay2”。

順便說一下,您可以通過單擊“行”單選按鈕進行測試並編寫自己的JSON。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM