node.js - req.body 在 node.js 和 express 应用程序中返回为空
问题描述
我正在用 express 学习 node.js。我很新,这是我第一个完全没有教程的项目。
该应用程序将使用 ejs 作为模板,我正在使用 express.json() 来解析表单中的数据。不使用 body-parser,因为 express 现在是开箱即用的。
每当我 console.log(req.body) 它作为一个空字符串出现。当我尝试 console.log(req.body.name) 或任何其他表单字段时,它返回为未定义。
请帮忙,我不知道问题出在哪里,这对我以前的任何练习应用程序都不是问题。
这是我的相关代码:
在 app.js 中
// Require routes
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
//
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//
app.use('/', indexRouter);
app.use('/users', usersRouter);
以我的形式(register.ejs):
<form action="/users/register" method="POST">
<div class="formGroup">
<label for="name">Name</label>
<input type="text" name="name" placeholder="Full name">
</div>
<div class="formGroup">
<label for="username">Username</label>
<input type="text" name="username" placeholder="Enter any username">
</div>
<div class="formGroup">
<label for="email">Email</label>
<input type="email" name="email" placeholder="Enter your email">
</div>
<div class="formGroup">
<label for="password">Password</label>
<input type="password" name="password">
</div>
<div class="formGroup">
<label for="password2">Confirm password</label>
<input type="password" name="password2">
</div>
<div class="formGroup">
<label for="about">About</label>
<textarea name="about" placeholder="Say a little bit about yourself..."></textarea>
</div>
<div class="formGroup">
<input type="submit" name="submit" value="Submit">
</div>
</form>
在我的路由文件(users.js)中
router.post('/register', (req, res, next) => {
console.log(req.body);
const newUser = {
name: req.body.name,
username: req.body.username,
email: req.body.email,
password: req.body.password,
about: req.body.about
}
console.log(newUser);
res.redirect('/users');
});
感谢您的任何回复!
解决方案
欢迎来到前面,我看到了你的代码,可能有一些你需要注意的错误。
你必须安装 bodyParsernpm install body-parser --save
`// Require routes
const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
//
app.use(logger('dev'));
app.use(express.json());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//
app.use('/', indexRouter);
app.use('/users', usersRouter);`
并以(在register.ejs
文件中)的形式action="/users/register"
使用,因此您必须/users
在users.js
文件中包含该路线,因为该路线post('/register' ...
应与action="/users/register"
.
推荐阅读
- identityserver4 - 如何为身份服务器 OAuth 登录设置同意 URL
- vue.js - 自建 Timepicker Vue JS 组件功能
- c# - DataGridView 单元格中的相对单击位置
- vba - Microsoft Word VBA 查找一个单词在多页文档的单个指定页面上出现的次数
- java - 当我在 Eclipse 中的 java 项目上执行“maven install”时,肯定会出现插件错误(即使我在我的 pom.xml 中有它)
- c# - 更新 Xamarin 表单会导致 System.IO.FileNotFoundException - ReactiveUI.Winforms 在使用 ReactiveUI 时
- python - 在 Python 中从正文中提取数据到 Excel 文件
- ngrx - angular-ngrx-data 创建自定义效果
- r - 如何使用两条单独的数据集线将 ggplot 图例添加到散点图
- algorithm - 不能在 time.AfterFunc 的参数中使用(属于的函数)类型 func()