mysql - express.js - req.body 未定义
问题描述
在 products.js 页面中,我在 2 条不同的路线上使用了 req.body,但在一条路线中,它工作得非常好,但在另一条路线上却不起作用。它是未定义的。(问题出在路线router.post('/edit/:productID')
上。)
index.js
const http = require('http')
const https = require('https')
const express = require('express')
const mysql = require('mysql')
const ejs = require('ejs')
const session = require('express-session')
const cookieparser = require('cookie-parser')
const bodyparser = require('body-parser')
const main = require('./routes/main')
const products = require('./routes/products')
const { isBuffer } = require('util')
const { LOADIPHLPAPI } = require('dns')
const { EDESTADDRREQ } = require('constants')
const { mainModule } = require('process')
const app = express()
app.use(express.static('public'))
app.use(bodyparser.urlencoded({ extended: false }))
app.use(bodyparser.json())
app.use(cookieparser())
app.use(session({
secret: 'secret',
saveUninitialized: false,
resave: false
}))
app.set('view engine', 'ejs')
app.use('/', main)
app.use('/products', products)
const db = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "info"
})
db.connect((err) => {
if(err)
console.log(err)
})
app.listen(3000, (err) => {
if(err) console.log(err)
})
产品.js
const express = require('express')
const router = express.Router()
const mysql = require('mysql')
const app = express()
const isseller = require('../middleware/auth.js')
const db = mysql.createConnection({
host: "localhost",
user: "root",
passowrd: "",
database: "info"
})
let prodname = ""
let proddesc = ""
let prodcategpry = ""
let prodprice = ""
let userid = 0
let productID = 0
router.get('/addproduct', isseller, (req, res) => {
res.render('addproduct.ejs')
})
router.post('/addproduct', isseller, (req, res) => {
prodname = req.body.name
proddesc = req.body.desc
prodcategory = req.body.category
prodprice = parseInt(req.body.price)
userid = req.cookies.logininfo.userid
db.query('INSERT INTO products (`prodname`, `proddesc`, `prodcategory`, `prodprice`, `userid`) VALUES ("'+prodname+'", "'+proddesc+'", "'+prodcategory+'", "'+prodprice+'", "'+userid+'")', (err, result) => {
if(err)
console.log(err)
else {
res.send("success")
}
})
})
router.get('/myproducts', isseller, (req, res) => {
userid = req.cookies.logininfo.userid
db.query("SELECT * FROM products WHERE userid = ?", [userid], (err, result) => {
if(err)
console.log(err)
else
res.render('myproducts', {result: result})
})
})
router.get('/edit/:productID', isseller, (req, res) => {
productID = parseInt(req.params.productID)
db.query("SELECT * FROM products WHERE prodid = ?", productID, (err, result) => {
if(err)
console.log(err)
else
res.render('editproduct', {result: result})
})
})
router.post('/edit/:productID', isseller, (req, res) => {
prodname = req.body.name
proddesc = req.body.desc
prodcategory = req.body.category
prodprice = req.body.price
productID = req.params.productID
console.log(prodname)
db.query("UPDATE products SET prodname = '"+prodname+"' WHERE prodid = '"+productID+"'", (err, result) => {
if (err)
console.log(err)
else
res.redirect('/products/myproducts')
})
})
router.delete('/delete/:productID', isseller, (req, res) => {
db.query("DELETE FROM products prodid = ?", [req.params.productId], (err, result) => {
if(err)
console.log(err)
else
res.redirect('/products/myproducts')
})
})
module.exports = router
编辑产品.ejs
<!DOCTYPE html>
<html>
<head>
<title> Title </title>
</head>
<body>
<input name="name" type="text" value=<%= result[0].prodname %>>
<br>
<input type="text" name="desc" value=<%= result[0].proddesc %>>
<br>
<input type="text" name="category" value=<%= result[0].prodcategory %>>
<br>
<input type="number" name="price" value=<%= result[0].prodprice %>>
<br>
<form action="/products/edit/<%= result[0].prodid %>" method="POST">
<button type="submit"> Submit </button>
</form>
</body>
</html>
我也使用app.use(express.urlencoded())
过,因为我正在使用 express 5,但它仍然无法正常工作。
解决方案
推荐阅读
- glsl - 如何在 Vulkan 主机程序上创建共享缓冲区?
- javascript - 从子组件到子组件调用函数
- spring-boot - X 中构造函数的参数 0 需要找不到类型为“Y”的 bean
- php - 无法将图像数据写入路径(上传/brand/1710068361905783.png)
- node.js - 如何在 AWS API Gateway + Lambda(JWT Auth)中自定义客户端请求
- python - 编译后的python代码可以再称为动态类型吗?
- python - 随机更改列表值的一半
- python - 使用 foreignKey 过滤模型
- docutils - 将 Docutils 0.17 HTML5 编写器恢复为 0.16 默认值
- javascript - Azure Batch 错误:“sudo:不存在 tty 且未指定 askpass 程序”