当前位置: 首页 > 知识库问答 >
问题:

body解析器不工作,req.body返回空

龙越彬
2023-03-14

我有一个带有简单表单的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..."));

在其他问题上,很多人说他们会使用这款应用。使用(bodyParser.urlencoded({extended:false}));但一切都没有改变。我试过了。json()也是,但似乎没有什么变化。顺便说一句,我试过了。记录(请求头)并返回:origin:'http://localhost:3000“,”内容类型“:”application/x-www-form-urlencoded“所以urlencoded应该可以工作,但它不能。有什么解决方案吗?谢谢

共有1个答案

屠君墨
2023-03-14

好了伙计们我解决了我自己的问题。我为任何有需要的人发布我的解决方案:基本上我在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")。

我用来解析身体的方式是:app。使用(bodyParser.urlencoded({extended:false}));

我建议将extended设置为true,以避免任何警告,但仅限于body的值。

 类似资料:
  • 此测试失败:预期: 我的代码有问题吗这是一个bug吗?

  • 我正在尝试解析一个XML文档,但由于某种原因,我无法从任何东西中获取任何子节点。我已经厌倦了我所知道的一切。我最初尝试使用Dom4J,但在命名空间方面遇到了重大困难。现在我正在尝试使用标准DOM解析器。 我已经阅读了oracle教程以及其他教程,但没有看到任何关于为什么我最基本的功能失败的建议。 我将首先分享我的代码: 所以简单地说,我想做的就是返回根节点(即“文档”)的子节点。)有一个应该返回的

  • 传入我的应用程序ID。我在某处读到配置在解析服务器上不起作用,但想确认一下

  • 单击按钮转到另一个活动,然后返回到原始活动。 我试图保存两个整数离开活动的另一个活动,然后稍后当我返回到原来的活动,我得到一个null包。 有人知道为什么这不起作用吗? 我使用savedInstanceState bundle在屏幕旋转时保存变量,它在这种情况下工作,但是当我离开查看另一个活动并稍后返回此活动时,该bundle没有保存。返回时获取空值。 onSavedInstanceState方法

  • 我安装了最新版本的body parser(1.17.1),并按照其他人建议的顺序设置代码。 > 进口快递 导入体解析器 app=Express(); app.use(body Parser.json); 应用程序。使用(bodyParser.urlencoded({extended:false})); 但我经常遇到错误“TypeError:无法读取未定义的属性‘password’”。 事实上,我无

  • 下面的示例将展示将HTML fragement String解析为Element对象作为html正文。 语法 (Syntax) Document document = Jsoup.parseBodyFragment(html); Element body = document.body(); 哪里 document - document对象表示HTML DOM。 Jsoup - 解析给定HTML