繁体   English   中英

ExpressJs,为什么请求体为空?

[英]ExpressJs, why is request body empty?

我使用 ExpressJs 创建一个简单的应用程序,接收一个 post 请求(也允许处理表单提交)。

我的 index.js 文件:

require ('./models/db');
const express = require('express')
const app = express()
const bodyParser = require('body-parser');
const hotelController = require('./controllers/hotelController'); 

app.use(express.static('public'))

app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json()); 


app.get('/', (req, res)=>{
    res.sendFile(path.join(__dirname, public, 'index.html'));
})

app.listen(30001, () => console.log("listen on 30001"))

app.use('/hotel', hotelController); 

下面是控制器文件,没什么特别的,只是接受一个 POST 请求,但是,当我尝试注销请求时,我只看到空括号{} ,之后的代码中断。 请求的正文是空的,无论是从表单发布还是使用邮递员

const express = require ('express');
var router = express.Router(); 
const blagoose = require ('mongoose'); 
const Hotel = blagoose.model('Hotel'); 



router.post('/',(req, res)=> {
    console.log(req.body)
    try {
        //if (req.body._id === "")
            insertRecord(req,res); 
       // else
            //updateRecord(req,res);
        
    } catch (error) {
        console.log("some error just happen " + error.message)
        
        
        }
        

   })

//some more code
module.exports = router; 

编辑 1:邮递员截图: 在此处输入图片说明

编辑 2:因此,在 ozgur 关于检查 Postman 标头的提示(将 Content-Type 更改为application/x-www-form-urlencoded )之后,Postman 请求有效(它有一个很好的主体)。 但是,我试图从表单中处理,它再次变为空。 这是我的 index.html 文件中的代码(我知道当 javascript 和 html 在同一个文件中时会很混乱,请耐心等待)。

<form  name="formInfo"  autocomplete="off" enctype="application/x-www-form-urlencoded" >
    <div class="form-group">
        <label for="inputOwnerName">Name </label>
        <input type="text" class="form-control" id="inputOwnerName" placeholder="Some name" value="Test Name" >
    
    <div class="form-group" style="text-align: center;">
        <button class="btn btn-yellow" style="width: 200px;">Send</button>
    </div>
</form>   

<script> 
    var form = document.forms.namedItem("formInfo");
    form.addEventListener('submit', function(ev) {

    // var oOutput = document.querySelector("div"); 
    var oData = new FormData(form);
    
    var ownerName = document.getElementById("inputOwnerName").value;
    alert(ownerName);

    oData.append("inputOwnerName", ownerName);

    var oReq = new XMLHttpRequest();
    oReq.open("POST", "/hotel", true);
    oReq.onload = function(oEvent) {
        if (oReq.status == 200) {
            // oOutput.innerHTML = "Uploaded!";
        } else {
            // oOutput.innerHTML = "Error " + oReq.status + " occurred when trying to upload your file.<br \/>";
        }
    };

    oReq.send(oData);
    ev.preventDefault();
    }, false);
</script>

你能不能改变你的代码而不是这个

app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(bodyParser.json()); 

只需使用这个:

app.use(express.json());

在 Postman 中,使用此内容类型: "application/json"并尝试使用原始数据提交

在此处输入图片说明

编辑:我的 json 数据的默认帖子标题

在此处输入图片说明

首先将这两行相互交换

app.listen(30001, () => console.log("listen on 30001"))

app.use('/hotel', hotelController);

接下来它的空的原因是控制器没有正确定义,即您从控制器export router对象的位置? 尝试这个:

---
module.exports = router

暂无
暂无

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

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