不要在节点js中获取请求主体休息web api

时间:2016-09-13 17:20:11

标签: jquery ajax node.js express body-parser

以下是我的nodejs代码

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.json());

app.post('/', function(request, response) {
    console.log(request.body);
    console.log('post hit');
    response.json({
        message: 'Post Hit'
    });
});

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

以下是我调用上述帖子结束点的javascript代码

 $.ajax({
                    type: "POST",
                    crossDomain: "true",
                    url: "http://localhost:8000/",
                    data: {
                        "a": "b"
                    },
                    headers: {
                        "Content-Type": "application/json"
                    },
                    success: function(d) {
                        alert(d);
                        console.log(d);
                    },
                    error: function(e) {
                        console.log(e);
                        alert(e);
                    }
                });

我总是得到我的request.body在节点js中为空。

有时候,其余的终点甚至都没有被击中。

我不知道这是如何运作的。

3 个答案:

答案 0 :(得分:2)

在express.js中启用CORS

Map(f = function(x) data.frame(Location = x[1],
                           Event = x[2],
                           Probs = double(56),
                           Date = character(56),
                           DayWeek = integer(56), stringsAsFactors = FALSE),
    x = data.frame(t(expand.grid(ListOfLocations, ListOfEvents))))

您还需要在ajax中的 json 中转换数据。

app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers', 'X-Requested-With')
  res.header('Access-Control-Allow-Headers', 'Content-Type')
  next()
})

PS:使用POSTMAN测试时。它不发送预检请求。这就是它在POSTMAN中起作用的原因。

在此处详细了解预检:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

答案 1 :(得分:2)

您还可以在chrome中添加“Allow-Control-Allow-Origin”扩展名,以使其在本地运行。 和

data: JSON.stringify({
    "a": "b"
})

在客户端发送数据。

答案 2 :(得分:2)

您可以轻松启用具有this节点模块的角色!

const cors = require('cors');
const express = require('express');
const app = express();

app.use(cors());

/* other routes here */