如何使用 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 从快递服务器访问它。