简体   繁体   English

req.body 返回一个空的 object // output {}

[英]req.body returns an empty object // output {}

Sending request from the client side returns an empty object, I have checked all the likely solution on stackoverflow, none seem to work for me.从客户端发送请求返回一个空的 object,我已经检查了 stackoverflow 上所有可能的解决方案,似乎没有一个对我有用。 I really need help as I have been stuck for over two weeks now.我真的需要帮助,因为我已经被困了两个多星期了。

Check out my html below:在下面查看我的 html:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    
    <title>Register User</title>
    <link rel="stylesheet" href="app.css"/>
</head>

<body>

    <form action="register.js"  id="mForm" method="POST">
        <div>
            <label for="nama"> Firstname</label>
            <input type="text" id="nama" name="nama" required>
        </div>

        <br>

        <div>
            <label for="namo"> Lastname</label>
            <input type="string" id="namo" name="namo" required>
        </div>

        <br>

        <div>
            <label for="password"> password</label>
            <input type="password" id="password" name="password" required>
        </div>

        <br>

        <div>
            <label for="email"> email</label>
            <input type="email" id="email" name="email" required>
        </div>
        <br>

        <div>
            <button type="submit" >signup</button>
        </div>
    </form>
    <br>

    <div id="det">

    </div>
    
    <script src="register.js"></script>
    
</body>

</html>

<a href="login.html"> login user</a>

While the fetch code is as shown below using xmlHttpRequest:使用 xmlHttpRequest 获取代码如下所示:


var form = document.getElementById('mForm');

form.addEventListener('submit', sendData);

function sendData(event) {
    event.preventDefault();

    var namo = document.getElementById('namo').value;
    var nama = document.getElementById('nama').value;
    var email = document.getElementById('email').value;
    var password = document.getElementById('password').value;


    var params = JSON.stringify({
        nama,
        namo,
        password,
        email
    });

    var vali = params;

    const XHR = new XMLHttpRequest();

    XHR.open("POST", "http://localhost:5000/admin/pass", true);

    XHR.setRequestHeader("Content-Type", "applicaion/json");


    XHR.onload = function () {
        const value = this.responseText;

        const deta = document.getElementById('det');

        deta.innerHTML = `
        <br>
        <div>${value}</div>
        <div>Firstname:${nama}</div>
        <div>Lastname:${namo}</div>
        <div>Email: ${email}</div>
         <br>
         `
        console.log(value);

    };

    XHR.send(vali);

}

Below is the schema (admin.js), if I include required:true in my schema, it return a validation error of path required.下面是架构(admin.js),如果我在架构中包含 required:true ,它会返回所需路径的验证错误。

const mongoose = require ('mongoose');
const adminSchema = new mongoose.Schema({
    nama:{
        type: String
    },
    namo:{
        type: String
    },
    email:{
        type: String       
    },
    password:{
        type: String,
        required: true
    },
   
});

adminSchema.index({email: 1}, {unique: true});

module.exports = mongoose.model('admin', adminSchema);

Below is the router that return empty {}:以下是返回空 {} 的路由器:

let express = require('express');
let router = express.Router();
const Admin = require('../model/admin');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const app = express();
app.use(express.json());

router.post('/pass', express.json(), async function(req, res) {
    res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
    res.setHeader("Access-Control-Expose-Headers", "Content-Type, application/json;charset=utf-8");

    const { nama, namo, email, password } = req.body;
    console.log(req.body); 
 
    return res.status(201).send(response);

});

While the controller is below: controller 如下:

if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config();
}

const express = require('express');
const app = express();
const cors = require('cors');
const methodOverride = require('method-override');
const registerRouter = require('./routes/register');
const parcelRouter = require('./routes/parcel');
const adminRouter = require ('./routes/admin');
const path = require('path');
const router = express.Router();

const mongoose = require('mongoose');

mongoose.connect(process.env.DATABASE_URL, {
useNewUrlParser: true, useUnifiedTopology: true});
const db = mongoose.connection;
db.on('error', error => console.error(error));
db.once('open', () => console.log('connected to Mongoose'));

app.use(express.json());
app.use(express.urlencoded({extended: false}));

app.use(express.text({type: 'application/json'}));

app.use('/', express.static(path.join(__dirname, 'static')));

app.use(cors());
app.use(methodOverride('_method'));


app.use('/admin', adminRouter);
app.use('/parcels/', router);
app.use('/register', registerRouter);
app.use('/user/', router);
app.use('/parcel', parcelRouter);


app.listen(process.env.PORT  || 5000);

In the above code i did not find response variable declared used in return res.status(201).send(response);在上面的代码中,我没有找到在return res.status(201).send(response);中声明的response变量; anywhere.任何地方。 it seems you forgot to define that may be that was the reason it is coming {} in response您似乎忘记定义这可能是它来响应的原因{}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM