POST 请求不会在 express 中得到处理

Posted

技术标签:

【中文标题】POST 请求不会在 express 中得到处理【英文标题】:POST request does not get handled in express 【发布时间】:2021-11-30 22:31:42 【问题描述】:

我使用 ejs、express、nodeJS 和 mysql。这段代码给了我一个错误:Cannot POST /search。 我认为 idex.ejs 和 app.js 很好,但我搞砸了 searchRouter ...

app.js

const express = require('express')
const app = express()

app.use('/static',express.static('static'))
app.set('view engine','ejs')

const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded(extended: false))
app.use(bodyParser.json())

const index = require('./router/indexRouter')
const upload = require('./router/uploadRouter')
const detail = require('./router/detailRouter')
const edited = require('./router/editedRouter')
const search = require('./router/searchRouter')

app.use("/",index)
app.use(upload)
app.use(detail)
app.use(edited)
app.use(search)

const port = 8080

app.listen(port, () => console.log(`Server up and running on port: $port !`))

搜索路由器

const express = require('express')
const router = express.Router()
const dbCon = require('../database.js')

router.get('/search',(req,res) =>
    const searched = req.body.search
    const query = `SELECT * FROM memes WHERE (title like "$searched OR user like "$searched)"`

    dbCon.query(query, (err, results) =>
        if(err) 
            console.log(err)
        
        console.log(results)
        res.render('detail',memes:results)
    )
)

module.exports = router

【问题讨论】:

你定义了 router.get('/search' ... ,你为什么期望它回答 post 请求? @gjqeriqi 请看看我的回答,如果对你有帮助,请告诉我,谢谢:) 【参考方案1】:

如果您想处理对您的/search 路由的POST 请求,您必须使用express 正确注册它。

像这样:

router.post('/search', (req, res) => 
  /* ... */
);

请注意 - 在您显示的代码中,您仅在所述路线上注册了 GET 请求。 然而 (!) 从逻辑的角度来看,我认为 GET 请求 /search 路由更有意义。

【讨论】:

以上是关于POST 请求不会在 express 中得到处理的主要内容,如果未能解决你的问题,请参考以下文章

使用 axios 和 express 处理 POST 请求

在Express中作为POST请求的结果呈现视图

如何发送 POST 请求以响应 node.js Express?

node10---GET请求和POST请求的参数

使用 Express 获得一个空的身体

multer处理post请求的代码演示