javascript - 带有 Express 的 Node.js:req.body 未定义
问题描述
我遇到了我的 Node.js 的 req.body 总是未定义或为 NULL 的问题。
我发现了很多过去的帖子。有人提到需要 post-method、body-parser 以及需要标签的属性名称。但根本不为我工作。我在代码中添加的所有内容。
服务器.js
const port = "5411";
const express = require('express');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const bcrypt = require('bcrypt');
const app = express()
app.listen(port, function () {
console.log("server is running on " + port);
});
app.use('/static', express.static("static"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
const db_con = mysql.createConnection({
host: "localhost",
user: "root",
password: "mitac123",
database: "human_resource"
});
db_con.connect(function (err) {
if (err) throw err;
console.log("DB Connected!");
});
app.get("/upload", function (req, res) {
res.sendFile(__dirname + "/html/homework.html");
});
app.post("/upload", function (req, res) {
let name = req.body.name; //it's here that I use console.log that get NULL or undefined
let username = req.body.username;
let password = req.body.password;
let gender = req.body.gender;
let email = req.body.email;
let question = req.body.securityQ;
let answer = req.body.answer;
DB_CreateOrUpdate(res, name, username, password, gender, email, question, answer);
})
function DB_CreateOrUpdate(res, name, username, password, gender, email, question, answer){
saltRounds = 10;
data = {
realName: String(name),
username: String(username),
password: bcrypt.hash(password, saltRounds),
gender: gender,
email: String(email),
securityQ: question,
answer: answer,
}
var sql_com = "INSERT INTO user_data SET ?"
db_con.query(sql_com, data, function (err, result) {
if (err) throw err;
console.log("1 record inserted");
console.log(result);
return res.send("Add successful!");
})
};
HTML 文件
<!DOCTYPE html>
<html lang="zh-Hant-TW">
<head>
<meta charset="utf-8">
<meta name="author" content="JustBelieveMe">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="../static/js/homework.js" type="text/javascript"></script>
<script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script>
<script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script>
<script src="https://static.runoob.com/assets/jquery-validation-1.14.0/dist/localization/messages_zh.js"></script>
<link rel="stylesheet" href="../static/css/homework.css" type="text/css" />
</head>
<body>
<header name="header" id="header">
Account Register Page
</header>
<div name="basicData">
<form name="sheet" id="sheet" ref="fileUpload" action="/upload" method="POST" enctype="multipart/form-data">
<fieldset>
<legend>基本資料</legend>
<br>
真實姓名:<input type="text" name="name" id="name">
<br>
使用者帳戶:
<input type="text" name="username" id="username">
<br>
密碼:
<input type="password" name="password" id="password">
<br>
請再輸入一次密碼:
<input type="password" name="verifyPassword" id="verifyPassword">
<br>
性別:
<select name="gender" id="gender">
<option value="0">男</option>
<option value="1">女</option>
</select>
<br>
大頭貼:
<input type="file" name="headShot" id="headShot" value="選擇檔案" accept="image/gif, image/jpeg, image/png">
<img id="imgPreview" style="width: 200px;" src="#" />
<br>
Email:
<input type="email" name="email" id="email">
<br>
安全問題:
<select name="securityQ" id="securityQ">
<option value="0">最喜歡吃的食物?</option>
<option value="1">第一隻養的寵物名字?</option>
<option value="2">最常用的網路ID?</option>
<option value="3">就讀哪一所國中?</option>
<option value="4">幾歲時拿到第一台個人電腦?</option>
</select>
<br>
安全問題答案:
<input type="text" name="answer" id="answer">
</fieldset>
<div name="buttonArea" id="buttonArea">
<input type="submit" class="buttonC" id="submit" value="送出">
<input type="button" class="buttonC" id="clear_btn" value="清除">
<input type="button" class="buttonC" value="填值">
</div>
</div>
</form>
<footer name="footer" id="footer">
<div>
copyright© 2020 JustBelieveMe All Rights Reserverd.
</div>
</footer>
</body>
</html>
顺便说一句,我会得到一个错误:
UnhandledPromiseRejectionWarning: Error: data and salt arguments required
但我认为这是由于 req.body 的空值导致哈希不起作用。
解决方案
那么试试这个:
安装 multernpm i multer
var multer = require('multer')
var upload = multer({ dest: 'uploads/' })
app.post('/upload', upload.single('headShot'), function (req, res, next) {
console.log(req.file);
console.log(req.body);
})
推荐阅读
- aws-api-gateway - API Gateway GET 因“缺少身份验证令牌”而失败(但 POST 有效)
- python - 从 Laravel 应用程序运行 Python 脚本
- linux - cent os 在虚拟盒中安装期间正在重新安装
- django - 无法连接到服务器:致命:用户“xxxx”的密码验证失败 致命:用户“xxxx”的密码验证失败
- python - 如何修复“import win32api # noqa: E402 ImportError: DLL load failed while importing win32api: %1 is not a valid”
- java - Gradle Build 失败,但 github repo 出现异常
- mongodb - 匹配数组的精确项或仅精确数组项的组合_MongoDB
- r - 如何将每个数据集填充为不同的颜色?
- python - 一次打开多个python程序
- android - 在 Android 分页库数据源中处理 Observable