2016-09-13 33 views
0

以下是我的NodeJS代码没有得到请求体在节点JS休息网页API

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); 
        } 
       }); 

我总是得到我的要求。 body在节点js中为空。

有时候,其余端点甚至没有命中。

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

+0

跨浏览器控制台发生跨域错误?跨域必须在生产者中处理,而不是在消费者中处理。有点像http://stackoverflow.com/questions/7067966/how-to-allow-cors-in-express-node-js –

+0

这个端点对于POSTMAN来说工作得很好。 –

回答

2

启用express.js

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() 
}) 

CORS还需要在您的数据转换JSON在阿贾克斯。 PS:当你使用POSTMAN测试的时候。它不发送预检请求。这就是为什么它会在POSTMAN中工作。

了解更多关于预检这里:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

2

您也可以在Chrome中添加“允许控制允许原产地”扩展得到它在本地运行。 和

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

在客户端发送数据。

2

您可以轻松地使用this节点模块启用cors!

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

app.use(cors()); 

/* other routes here */