Node.js req.body为空 [英] Node.js req.body empty

查看:62
本文介绍了Node.js req.body为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在和这个混蛋.我不知道为什么我的node.js响应为空.如果我通过此处的javascript发送,或者使用Advanced REST客户端,它将返回{}.这是我的代码:

I am having a hell of a time with this one. I don't know why my node.js response is empty. It comes back {} if I send it through the javascript here, or if I use the Advanced REST client. Here is my code:

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是{}.

In my console, I see that the req.body is {}.

我不知道我在做什么错.我尝试使用httpbin进行尝试,并且可以看到javascript正常工作,这意味着我可能在节点端做错了事,但是我无法弄清楚是什么.如果我改为在表单上使用method ="submit",那么该帖子就可以了,但这不是我想要的.我究竟做错了什么??因为高级REST客户端也会失败,所以我猜它是节点吗?

I don't know what I am doing wrong. I have tried using httpbin and I can see that the javascript works fine, which means I am probably doing something wrong on the node side, but I cannot figure out what. If I instead use method="submit" on the form, then the post goes through just fine, but it's not what I want to do. What am I doing wrong?? Because advanced REST client also fails, I am guessing it is node?

推荐答案

您正在请求中发送json,但只有中间件设置可以处理url编码的请求.将此添加到您的中间件中,并且json请求应填充在req.body中.

You are sending json in the request, but you only have middleware setup to handle url encoded requests. Add this to your middleware and json requests should populate in the req.body.

app.use(bodyParser.json());

更多信息可以在正文解析器文档中找到.具体来说,您会注意到您正在使用的中间件 urlencoded 指出它仅解析经过urlencoded的正文(这是使用Content-Type的地方).

More info can be found at in the body parser documentation. Specifically you'll notice that the middleware you are using urlencoded states that it only parses urlencoded bodies (this is where Content-Type is used).

这篇关于Node.js req.body为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆