首页 > 解决方案 > 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,但它仍然无法正常工作。

标签: mysqlnode.jsexpress

解决方案


推荐阅读