簡體   English   中英

Express.json 未解析 POST 正文 - 未定義

[英]Express.json not parsing POST body - undefined

JSON 從我要使用的 IoT API 接收到的 POST 數據。 注意多部分表單數據。 有時可以附加圖像文件,但我對處理圖像部分不感興趣:

POST {
  host: '192.168.78.243:3000',
  accept: '*/*',
  'content-length': '1178',
  'content-type': 'multipart/form-data; boundary=------------------------f519f81dc2e1d562'
}
--------------------------f519f81dc2e1d562
Content-Disposition: form-data; name="event"; filename="event_3913.json"
Content-Type: application/octet-stream

{"packetCounter":"3913",
"capture_timestamp":"1600677267347",
"datetime":"20200921 204027000",
"stateUTF8":"ABC123",
"stateASCII":"ABC123",
.....

我想訪問 JSON 數據,並且正在使用 express。 根據這個 SO answer我已經用 express.json() 嘗試過這種方法:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/test', (req, res) =>{
    if (req.method === 'POST') {
        console.log('POST request recd');
    }
    console.log(req.body);
    res.status(200).send('It works');
});

app.listen(3000, () => console.log('server started'));

但是我在控制台上得到的只是undefined {}

更新

即使導入正確,express/body-parser 方法也不起作用。

只要證明正在接收 POST 請求,下面的方法就可以工作 但我需要使用一種快速方法,以便我可以訪問傳入的數據:

let buffers = [];
const http =require('http')
http.createServer((request, response) => {
    console.log('Now we have a http message with headers but no data yet.');
    if (request.method === 'POST' && request.url === '/test') {
        console.log('Hit');
    }
    request.on('data', chunk => {
        console.log('A chunk of data has arrived: ', chunk);
        buffers.push(chunk);
    });
    request.on('end', () => {
        console.log('No more data');
        let body = Buffer.concat(buffers);
        console.log(String(body));
    })
}).listen(3000)

如何使用 express 獲取數據?

您安裝了body-parser但沒有導入body-parser才能工作。

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(express.static('public'));

app.get('/', (req, res) => {
  res.sendFile('public/index.html');
}); 

app.post('/test', (req, res) =>{
  console.log(req.body);
  res.status(200).send('It works');
});

app.listen(3000, () => console.log('server started'));

更新的答案

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.use(express.static('public'));

app.get('/', (req, res) => {
  res.send(`<form action="/test" method="POST" >
  <label for="fname">First name:</label>
  <input type="text" id="fname" name="fname"><br><br>
  <label for="lname">Last name:</label>
  <input type="text" id="lname" name="lname"><br><br>
  <input type="submit" value="Submit">
</form>`)
}); 

app.post('/test', (req, res) =>{
  console.log(req.body);
  res.status(200).send('It works');
});

app.listen(3000, () => console.log('server started'));

在線試用 https://repl.it/join/ldopaeji-pprathameshmore

輸出

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('192.168.78.243:3000/', (req,res) =>{
console.log(req.body.stateUTF8);
console.log(req.body);
res.sendStatus(200);
});
app.listen(3000, ()=> console.log('listening'));

試試這個!!

暫無
暫無

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

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