[英]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;
编辑 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.listen(30001, () => console.log("listen on 30001"))
app.use('/hotel', hotelController);
接下来它的空的原因是控制器没有正确定义,即您从控制器export
router
对象的位置? 尝试这个:
---
module.exports = router
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.