node.js - TypeError:无法解构“request.body”的属性“用户名”
问题描述
我在 router.post 中声明变量并从数据库中检索数据,但它说一个类型错误,它无法解构“request.body”的属性“用户名”,因为它是未定义的。请指教。
这是有问题的文件夹const { username, password } = request.body;
。
User.js(在路由文件夹下)
const express = require("express");
const router = express.Router();
const mysql = require("mysql");
//connection to database
const connection = mysql.createConnection({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE,
});
router.get("/", function (request, response) {
response.render("login.html");
});
router.post("/auth", function (request, response) {
try {
const { username, password } = request.body;
connection.query(
"SELECT * FROM accounts WHERE username = ? AND password = ?",
[username, password],
function (error, results, fields) {
if (results.length > 0) {
request.session.loggedin = true;
request.session.username = username;
response.redirect("/agenthome");
} else {
response.send("Incorrect Username and/or Password!");
}
response.end();
}
);
} catch (error) {
console.log(error);
}
});
module.exports = router;
应用程序.js
const mysql = require("mysql");
const express = require("express");
const session = require("express-session");
const bodyParser = require("body-parser");
const dotenv = require("dotenv");
const path = require('path');
const app = express();
const userRoutes= require('./routes/user');
//env configuration
dotenv.config({ path: "./.env" });
app.use("/", userRoutes);
//connection to database
const connection = mysql.createConnection({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE,
});
// check database connection err
connection.connect(function (err) {
if (err) {
return console.error("error: " + err.message);
}
console.log("Connected to the MySQL server.");
});
//prevent course errors
app.use((res, req, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Auhtorization"
);
if (req.method === "OPTIONS") {
res.header("Access-Control-Allow-Methods", "PUT, POST, PATCH, DELETE, GET");
}
next();
});
app.use(
session({
secret: "secret",
resave: true,
saveUninitialized: true,
})
);
app.use('/assets', express.static('assets'));
//view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set("view engine", "ejs");
//render HTML files
app.engine('html', require('ejs').renderFile);
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.listen(3000);
解决方案
尝试采取
app.use("/", userRoutes);
并将其移至底部,之后
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
request.body 可能不正确,因为如果在 bodyparser 中间件之前添加路由,则路由可能不使用 json 格式。
推荐阅读
- python - 使用 PyTorch 和 Tensorflow 从缓冲区加载张量
- java - getPreferenceScreen().findPreference 与 findPreference 之间的区别
- azure - Azure AD 定价
- firebase - 在 Flutter 上限制从 Firebase 检索文档
- xml - 如何获取带有 xslt 数据的标签名称
- mysql - 想要使用它,但语法错误帮助我修复查询生成器 Codeigniter 中的永久错误
- jpa - 如何通过在 Olingo 中映射来修改 olingo 中的 Edm 类型
- javascript - Javascript 对象数组
- asp.net-core - 如何将 Windows 身份验证与 Blazor WebAssembly 和 ASP.NET Core 服务器一起使用?
- java - 如何用Java编写一个强数字函数