如何使用 express.js 服务器从 post 表单获取数据
How to get data from post form with express.js server
问题:
当客户端向服务器提交 post 请求时,快递服务器得到一个空体(req.body = {})。
我想做什么:
从客户端获取 req.body.username 和 req.body.password post 请求(发送下面的表格)
Server.js(主应用程序文件)
var express = require('express')
var http = require('http')
const mongoose = require('mongoose')
const { json } = require('express')
var cookieParser = require('cookie-parser')
var app = express()
var server = http.createServer(app)
const bodyParser = require('body-parser')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
const formidable = require('formidable');
mongoose.connect('mongodb://localhost:27017/grabber', {useNewUrlParser: true, useUnifiedTopology: true});
app.use(cookieParser())
app.set("view engine", "ejs")
app.set('views', __dirname+'/views/html/');
app.use("/js", express.static(__dirname + "/views/js"))
app.use("/css", express.static(__dirname + "/views/css"))
const registerRoute = require("./routes/register")
const grabberRoute = require("./routes/grabber")
const downloadRoute = require("./routes/download")
const adminRoute = require("./routes/admin")
app.use("/register", registerRoute)
app.use("/id", grabberRoute)
app.use("/download", downloadRoute)
app.use("/admin", adminRoute)
app.get("/", (req, res) => {
res.redirect("/register")
})
app.use(function (err, req, res, next) {
res.status(400).send("Error code: 2 <hr> This page is currently inaccessible! <br> <a href='/'>GO TO HOMEPAGE</a>")
console.log(err)
})
server.listen(80)
我遇到问题的路线(在 post 请求中)
const express = require('express')
const router = express.Router()
const kSchema = require("../models/key")
const Schema = require("../models/adminCredentials")
const fs = require('fs');
const formidable = require('formidable');
router.get("/", (req, res) => {
checkCookie(req.cookies['credentials'], cookieCb)
function cookieCb(f){
if(f != null && f != undefined && f !=""){
res.render("admin", {})
}else{
res.render("adminLogin", {})
}
}
})
async function checkCookie(cookieV, cb){
let found = Schema.findOne({Session: cookieV}, function(err,obj){}).then(f => cb(f))
}
router.post("/loginInput", (req, res) => {
console.log(req.body)
})
module.exports = router
我发送给客户端的html/ejs文件
<html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
</body>
</html>
我在用什么:
正文解析器 - 1.19.0
connect-busboy - 0.0.2
cookie 解析器 - 1.4.5
crypto-js 4.0.0
ejs 3.1.5
快递4.17.1
猫鼬 5.11.19
我整天都在寻找解决方案,然后我发现我没有给表单提供 id。
这是不固定的:
<form action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
这是固定的:
<form id="loginform" action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
当我为表单提供 ID 时,我可以使用 req.body 从快递服务器访问它。
问题: 当客户端向服务器提交 post 请求时,快递服务器得到一个空体(req.body = {})。
我想做什么: 从客户端获取 req.body.username 和 req.body.password post 请求(发送下面的表格)
Server.js(主应用程序文件)
var express = require('express')
var http = require('http')
const mongoose = require('mongoose')
const { json } = require('express')
var cookieParser = require('cookie-parser')
var app = express()
var server = http.createServer(app)
const bodyParser = require('body-parser')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
const formidable = require('formidable');
mongoose.connect('mongodb://localhost:27017/grabber', {useNewUrlParser: true, useUnifiedTopology: true});
app.use(cookieParser())
app.set("view engine", "ejs")
app.set('views', __dirname+'/views/html/');
app.use("/js", express.static(__dirname + "/views/js"))
app.use("/css", express.static(__dirname + "/views/css"))
const registerRoute = require("./routes/register")
const grabberRoute = require("./routes/grabber")
const downloadRoute = require("./routes/download")
const adminRoute = require("./routes/admin")
app.use("/register", registerRoute)
app.use("/id", grabberRoute)
app.use("/download", downloadRoute)
app.use("/admin", adminRoute)
app.get("/", (req, res) => {
res.redirect("/register")
})
app.use(function (err, req, res, next) {
res.status(400).send("Error code: 2 <hr> This page is currently inaccessible! <br> <a href='/'>GO TO HOMEPAGE</a>")
console.log(err)
})
server.listen(80)
我遇到问题的路线(在 post 请求中)
const express = require('express')
const router = express.Router()
const kSchema = require("../models/key")
const Schema = require("../models/adminCredentials")
const fs = require('fs');
const formidable = require('formidable');
router.get("/", (req, res) => {
checkCookie(req.cookies['credentials'], cookieCb)
function cookieCb(f){
if(f != null && f != undefined && f !=""){
res.render("admin", {})
}else{
res.render("adminLogin", {})
}
}
})
async function checkCookie(cookieV, cb){
let found = Schema.findOne({Session: cookieV}, function(err,obj){}).then(f => cb(f))
}
router.post("/loginInput", (req, res) => {
console.log(req.body)
})
module.exports = router
我发送给客户端的html/ejs文件
<html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
</body>
</html>
我在用什么:
正文解析器 - 1.19.0
connect-busboy - 0.0.2
cookie 解析器 - 1.4.5
crypto-js 4.0.0
ejs 3.1.5
快递4.17.1
猫鼬 5.11.19
我整天都在寻找解决方案,然后我发现我没有给表单提供 id。
这是不固定的:
<form action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
这是固定的:
<form id="loginform" action="/admin/loginInput" method="POST">
<input name="username" id="username" class="username" placeholder="Username">
<input name="password" id="password" class="password" placeholder="Password">
<button name="password" type="submit" class="submit">Login</input>
</form>
当我为表单提供 ID 时,我可以使用 req.body 从快递服务器访问它。