Express框架如何接收POST方法的请求参数

问题描述

使用 Express 框架时,通过 POST 方式处理客户端的请求参数,但是通过 req.query 接收到的一直都是 {}

问题还原

为了清晰地记录这个问题,我将问题进行抽离单独还原这个问题的场景。现在抽离之后的工程目录如下:

|--app.js
|--index.ejs
|--package.json

这里使用了 ejs 模板引擎,所以要先安装 ejs 和 Express 框架:

npm install --save--dev express
npm install --sve--dev ejs

然后 app.js 文件作为主要的处理文件,代码如下:

const express = require("express")
const app = express()
const port = 8080

// 设置模板文件所在的目录
app.set("views", "./")
// 设置使用的模板引擎
app.set("view engine", "ejs")
// 主页路由
app.get("/", (req, res) => {
  res.render('./index.ejs')
})
// 处理POST方式的请求
app.post("/test", (req, res) => {
  // 接收请求参数
  console.log(req.query)
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

在访问主页时需要显式一个表单,用来提交 POST 方式的请求:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>问题还原</title>
</head>

<body>
  <form action="/test" method="POST">
    <input type="text" id="inputValue" name="inputValue">
    <input type="submit" value="提交">
  </form>

</body>

</html>

最后通过 node app.js 命令启动服务,这时访问 http://127.0.0.1:8080 时可以在浏览器中看到这个表单了。

在这里插入图片描述

在输入框输入任意内容,然后点击【提交】按钮,这时看一下控制台的打印信息:

在这里插入图片描述

解决方案

查询了一下 Express 框架的官网 API 文档,发现遇到这个问题有两个错误。

  1. Express 框架接收 POST 方式的请求参数使用的不是 req.query 而是 req.body
  2. Express 框架在接收 POST 方式的请求参数之前需要设置 app.use(express.json())app.use(express.urlencoded({ extended: true }))

改造之后的 app.js 文件的代码如下:

const express = require("express")
const app = express()
const port = 8080

app.set("views", "./")
app.set("view engine", "ejs")

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

app.get("/", (req, res) => {
  res.render('./index.ejs')
})

app.post("/test", (req, res) => {
  console.log(req.body)
})

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

改造之后通过 node app.js 命令重新启动服务,然后在输入框输入任意内容,然后点击【提交】按钮,这时看一下控制台的打印信息:

在这里插入图片描述

到此问题解决~

写在后面的话

这个问题其实很简单,也很基础~ 可是有时候就是容易犯错,好记性不如烂笔头!

  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值