gpt4 book ai didi

javascript - Req.Body 未定义 NODE.JS POST 请求

转载 作者:行者123 更新时间:2023-11-29 09:52:11 26 4
gpt4 key购买 nike

我目前正在开发一个与 mysql 数据库通信的简单 Node.JS 应用程序。

应用程序从数据库获取数据并使用 app.get 将其放入表中,并且运行良好。

我遇到的问题是 req.body 在使用 app.post 时没有返回任何内容。应用程序将提交到数据库,但由于 req.body 未返回任何内容,因此值为 null。如果我将 req.body 变量与硬编码变量交换,它将发布实际值,例如“12320”。

因此,我已将问题隔离到使用 req.body 的发布请求。

如果我控制台日志 req.body 它是空的。

我已经阅读了有关此问题的所有 stackoverflow 问题,但未能找到解决方案。

我尝试重新安装 body-parser、express、morgan 和 mysql。

我尝试在新目录中重新创建应用程序并再次安装模块。

我尝试重命名变量,以防产生一些影响(例如 name="test"、req.body.test)

但这一切都无济于事。

<form id="submit_missing" action="/submit_quote" method="POST" enctype="multipart/form-data">

<input type="text" id="submit_quote_id" name="submit_quote_id" placeholder="Quote ID">

<input type="text" id="submit_priority" name="submit_priority" placeholder="Priority" list="priority_list">

<input type="text" id="submit_customer" name="submit_customer" placeholder="Customer">

<input type="text" name="submit_who" id="submit_who" placeholder="Who's On it" list="purchasing">

<input type="text" id="submit_account_manager" name="submit_account_manager" placeholder="Account Manager" list="account_managers">

<button id="submit_quote">SUBMIT</button>

<form>
// server.js

const express = require('express')
const app = express()
const morgan = require('morgan')
const mysql = require('mysql')
const bodyParser = require('body-parser')

app.use(bodyParser.json({ type: '*' }))
app.use(bodyParser.urlencoded({ extended: true }))

app.use(express.static('./public'))
app.use(express.static('./files'))

const user = ***
const pass = ***

function getBoardConnection() {
return mysql.createConnection({
host: "localhost",
port: "3306",
user: user,
password: pass,
database: "board"
})
}

app.get('/get_board_quotes', (req, res) => {
const con = getBoardConnection()

const queryString = "SELECT * FROM board_quotes WHERE quote_complete = '0'"
con.query(queryString,(err, rows, fields) => {
if (err) {
console.log("Failed to query for /get_board_quotes : " + err)
}
console.log("Getting data from database for /get_board_quotes")
res.json(rows)
})

})


app.post('/submit_quote/', (req, res) => {
console.log(req.body)
quote_id = req.body.submit_quote_id
priority = req.body.submit_priority
customer = req.body.submit_customer
who_quoted = req.body.submit_who
account_manager = req.body.submit_account_manager
type = ""


queryString = "INSERT INTO board_quotes (quote_id, priority, customer, who_quoted, account_manager, quote_type) \
VALUES (?, ?, ?, ?, ?, ?)"

getBoardConnection().query(queryString, [quote_id, priority, customer, who_quoted, account_manager, type], (err, results, field) => {
if (err) {
console.log("Failed to insert new board order " + err)
return res.redirect('/board/quotes.html')
}
console.log("Inserted a new board with id ")
res.redirect('/board/quotes.html')
})

})

app.listen(6565, () => {
console.log("Server is running")
})

输出


Server is running
Getting data from database for /get_board_quotes
{}
Failed to insert new board order Error: ER_BAD_NULL_ERROR: Column 'quote_id' cannot be null

{} 是 console.log(req.body) 的输出

任何帮助将不胜感激。

最佳答案

您遇到的问题是您设置了 enctype="multipart/form-data"在您的<form>上HTML 标签。默认情况下,body-parser 使用Content-Type解析主体multipart/form-data 的 header ,这就是您告诉浏览器发送的内容。

有一个简单的方法可以解决这个问题:我建议不要设置 enctype关于<form>元素,因为浏览器默认为 application/x-www-form-urlencoded这是表单主体的类型 body-parser将默认解析。

您可以尝试传递 type: "multipart/form-data"作为您调用 bodyParser.urlencoded() 时的一个选项,这将使 body-parser解析以该内容类型发送给它的任何内容。 (更正: body-parser 实际上,如果我告诉它解析 multipart/form-data 对我来说只是默默地失败)

这个question/answer可能会有进一步的帮助。

关于javascript - Req.Body 未定义 NODE.JS POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54615722/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com