node.js - 正文解析器:无法从表单中获取值
问题描述
我创建了一个用于注册用户的表单。我想使用 body-parser 从表单中获取值,但我不能这样做。在控制台中打印时,它会给出未定义的打印。我不明白我做错了什么。我什至尝试使用邮递员,但它不起作用。这是我的代码:
var express = require('express'),
app = express(),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
passport = require('passport'),
LocalStrategy = require('passport-local'),
methodOverride = require('method-override'),
flash = require('flash'),
session = require('express-session');
app.get("/about", function(req, res) {
res.render("about");
});
app.get("/register", function(req, res) {
res.render("register");
});
app.post("/register", function(req, res) {
var firstName = req.body.firstName,
lastName = req.body.lastName,
username = req.body.username,
email = req.body.email;
var newUser = new User({
firstName: firstName,
lastName: lastName,
username: username,
email: email
});
console.log(firstName + " " + req.body.password + " " + req.body.c_password);
User.register(newUser, req.body.password, function(err, user) {
if(err) {
return res.render("register", {'error': err.message});
}
passport.authenticate('local')(req, res, function() {
req.flash('success', 'Welcome ' + user.username);
res.redirect('/home');
})
})
});
var port = process.env.PORT || 3000;
app.listen(port, function() {
console.log("Service Running");
});
这是我的表格
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Hotel Site</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M" crossorigin="anonymous">
<link rel="icon" href="https://www.svgrepo.com/show/12002/hotel.svg" type="image/x-icon">
<link rel="stylesheet" href="/stylesheets/style.css">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
</head>
<body>
<div class="container" style="margin-bottom: 4.5rem;">
<h1 style="text-align: center; margin-top: 7rem; margin-bottom: 20px">Sign Up</h1>
<div class="col-lg-6" style="margin: auto;">
<form action="/register" method="POST" enctype="multipart/form-data">
<div class="form-row">
<div class="form-group col-6">
<input class="form-control" type="text" name="firstName" placeholder="First Name" required>
</div>
<div class="form-group col-6">
<input class="form-control" type="text" name="lastName" placeholder="Last Name" required>
</div>
</div>
<div class="form-group">
<input class="form-control" type="text" name="username" placeholder="Username" required>
</div>
<!-- <div class="form-group">
<input class="form-control" type="email" name="email" placeholder="E-mail" required>
</div> -->
<div class="form-group">
<input class="form-control" type="password" name="password" placeholder="Password" required>
</div>
<div class="form-group">
<input class="form-control" type="password" name="c_password" placeholder="Confirm Password" required>
</div>
<div class="form-group">
<button class="btn btn-lg btn-primary btn-block">Submit</button>
</div>
</form>
<a href="/home">Go Back</a>
</div>
</div>
</body>
帮助非常感谢!!!
解决方案
Express 使用中间件,它们是可以访问传入请求的函数。可以修改请求等。简单地说,中间件可以用于很多事情。
您尚未设置bodyParser
为中间件,因此它将无法正常工作。这可以通过以下方式完成:
app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())
用于路由之前传入 JSON的表单数据
。
这是中间的 ExpressJs 指南:https ://expressjs.com/en/guide/writing-middleware.html
推荐阅读
- python - 第 3 方通知上的 Flask + Celery 任务重复
- rxjs - 如何使用 ws ( Websockets ) 和 RxJs 在 NestJS 中连接一个长时间运行的进程
- flutter - 打印出所有 hashMap 值
- php - 将现有数据从 php 解密到 nodejs
- java - 无法在主应用程序的 setter 方法中引发自定义异常
- javafx - 表列首选项宽度
- sql - 在 PIVOT 内的 AVG 函数后设置两位小数
- quarkus - RESTEASY003210:找不到完整路径的资源 - Quarkus
- monaco-editor - 链接模型的首选方式
- shopware - Shopware 5如何在客户表中显示用户属性?