2016-09-13 4 views
0

Ниже мой nodejs кодне получает тело запроса в узле расслоения плотного остального Web 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); 
        } 
       }); 

Я всегда получаю мою просьбу. тело пустое в узле js.

Иногда остальная конечная точка даже не попадает.

Я не знаю, как это работает.

+0

Ошибка перекрестного домена в браузере? Перекрестный домен должен обрабатываться у производителя, а не для потребителя. somethink like http://stackoverflow.com/questions/7067966/how-to-allow-cors-in-express-node-js –

+0

Эта конечная точка работает очень хорошо с POSTMAN. –

ответ

2

Включение CORS в 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() 
}) 

также необходимо преобразовать данные в JSON в Ajax.

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

PS: при тестировании с использованием POSTMAN. он не отправляет запрос перед полетом. поэтому он будет работать в POSTMAN.

Подробнее о предполетной здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

2

Вы также можете добавить расширение "Allow-Control-Allow-Origin" в хроме, чтобы запустить его локально. и

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

на стороне клиента для отправки данных.

2

Вы можете легко подключить cors с модулем узла this!

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

app.use(cors()); 

/* other routes here */