javascript - body-parser 不起作用并且 req.body 返回空
问题描述
我有一个 ejs 模板,它有一个简单的表单,只有一个值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cambia email</title>
</head>
<body>
<form action="/user/cambia-email" method="POST">
<input type="text" name"email" id="email">
<input type="submit" value="Modifica email">
</form>
</body>
</html>
在我的 app.js 中,我尝试调用console.log(req.body),但它返回空的“{}”。这是我的 app.js 代码:
const fs = require("fs");
const express = require("express");
const jwt = require("jsonwebtoken");
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const { verifyToken, signToken, deleteToken } = require("./middleware/user-auth");
require("dotenv").config();
const app = express();
app.set("view engine", "ejs");
app.use(express.static("public"));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.get("/user/cambia-email", verifyToken, (req, res) => {
res.render("cambia-email");
});
app.post("/user/cambia-email", verifyToken, (req, res) => {
console.log(req.headers);
console.log(req.body);
res.send("Hai richiesto la modifica dell'email. Sei autorizzato!");
});
app.get("/login", signToken, (req, res) => {
res.send();
});
app.get("/logout", deleteToken, (req, res) => {
res.send("Logout effettuato")
});
app.get("/user/profile", verifyToken, (req, res) => {
const tema = req.user.tema;
res.render("profile", { tema });
});
app.get("/user/message", verifyToken, (req, res) => {
res.send("Sei autorizzato!");
});
app.listen(3000, () => console.log("Server in ascolto sulla porta 3000..."));
在其他问题中,很多人说要使用app.use(bodyParser.urlencoded({ extended: false })); 但没有任何改变。我也试过.json()但似乎没有任何改变。顺便说一句,我也尝试过 console.log(req.headers) 并返回:origin: 'http://localhost:3000', 'content-type': 'application/x-www-form-urlencoded'所以 urlencoded 应该工作,但它没有。有什么解决办法吗?谢谢
解决方案
好的,我解决了我自己的问题。我为任何需要的人发布我的解决方案:基本上我在我的 ejs 文件中重写了我的表单,所以:
<form action="/user/cambia-email" method="post">
<label form="email">Email:</label>
<input type="text" name="email" id="email"><br><br>
<input type="submit" value="Modifica email">
</form>
问题是名称在 (name"email" 而不是 name="email") 之后没有等号。
我用来解析body的方式是:app.use(bodyParser.urlencoded({extended: false }));
我建议将 extended 设置为 true 以避免任何警告,但只有 body 的值。
推荐阅读
- python - 如何处理 FutureWarning:Int64Index.flags 已弃用,将在未来版本中删除?
- python - 查找多页表中的页数
- node.js - 我无法理解这个 Node JS 方法是如何返回“任务列表”的?
- python - 一对一课程未在 django 中更新:给出完整性错误
- pandas - 熊猫数据框子图按列分组
- sql-server - 查询结果正确但使用执行标量函数系统返回 0
- image - 如何从任何消费产品的图像中检测文本/徽标细节?
- dart -
- firebase - 如何从 Firestore 获取过去一小时内更新的文档?
- javascript - 空手道 JavaScript 数组格式