2016-09-13 32 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 */