我正在用express学习node.js。我很新,这是我的第一个完全没有教程的项目。
该应用程序将使用ejs作为模板,而我正在使用express.json()来解析表单中的数据。自从express以来,就不使用body-parser了。
每当我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');
});
感谢您的任何答复!
答案 0 :(得分:0)
您需要一个中间件来解析请求主体。我认为最常见的是body-parser。相当容易使用:
npm install body-parser
var bodyParser = require('body-parser')
app.use(bodyParser.json({ type: 'application/*+json' }))
答案 1 :(得分:0)
好!这很尴尬。我刚刚重新启动服务器,它正在运行。我不知道为什么以前没有用。我认为这可能是因为我以为我在不使用时正在使用nodemon。好东西,我在我的第一篇文章中向我展示了我有多少菜鸟哈哈。
答案 2 :(得分:0)
欢迎来到前面, 我看到了您的代码,您可能要注意一些错误。
您必须安装bodyParser npm 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
,因为{ {1}}应该与post('/register' ...
相同。