我和这个人度过了一段难忘的时光。我不知道为什么我的node.js响应是空的。如果我通过这里的javascript发送它,或者如果我使用Advanced REST客户端,它会返回{}。这是我的代码:
client.js
unction ajaxPost(){
var req = new XMLHttpRequest();
var payload = {'Add Item':'Add Item',
'name':document.getElementById('submitForm').elements[0].value,
'reps':document.getElementById('submitForm').elements[1].value,
'weight':document.getElementById('submitForm').elements[2].value,
'date':document.getElementById('submitForm').elements[3].value,
'lbs':document.getElementById('submitForm').elements[4].value
}
payload['test'] = 'value!';
console.log('did this happen?');
console.log(payload['test']);
var url = '/edit';
req.open('POST', url, true);
req.setRequestHeader('Content-Type', 'application/json');
req.addEventListener('load',function(){
if(req.status >= 200 && req.status < 400){
var response = JSON.parse(req.responseText);
console.log('you got a response!')
} else {
console.log("Error in network request: " + req.statusText);
}});
console.log(JSON.stringify(payload));
req.send(JSON.stringify(payload));
event.preventDefault();
}
HTML
<form id = "submitForm">
<input type="text" name="name" id="name" value='test'>Name<br>
<input type="text" name="reps" id="reps" value='10'>Reps<br>
<input type="text" name="weight" id="weight" value='100'>Weight<br>
<input type="text" name="date" id="date" value='1/1/16'>Date<br>
<input type="text" name="lbs" id="lbs" value='1'>Pounds<br>
<input type="submit" onclick = 'ajaxPost()' value="Add Item">
</form>
服务器
var express = require('express');
var mysql = require('./dbcon.js');
var bodyParser = require('body-parser');
var app = express();
var handlebars = require('express-handlebars').create({defaultLayout:'main2'});
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
app.set('port', 3010);
app.post('/edit',function(req,res,next){
//var context = {};
console.log('you posted!');
console.log(req.body);
在我的控制台中,我看到req.body是{}。
我不知道我做错了什么。我试过使用httpbin,我可以看到javascript工作正常,这意味着我可能在节点方面做错了,但我无法弄清楚是什么。如果我在表单上使用method =“submit”,那么帖子就会很好,但这不是我想做的。我究竟做错了什么??因为高级REST客户端也失败了,我猜它是节点?
答案 0 :(得分:2)
您正在请求中发送json,但您只有中间件设置来处理url编码的请求。将此添加到您的中间件,json请求应填充在req.body中。
urlencoded
可以在正文解析器documentation中找到更多信息。具体来说,您会注意到middleware you are using System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;
表示它只解析urlencoded主体(这是使用Content-Type的地方)。
答案 1 :(得分:0)
您将标题设置为json
req.setRequestHeader('Content-Type', 'application/json');
并且未使用bodyParser.json()
。
尝试添加app.use(bodyParser.json());