Express App发布请求

时间:2016-10-26 17:34:06

标签: javascript jquery ajax node.js

我在向我的快递应用程序发出POST请求时遇到了一个奇怪的问题。

我已经使用http://plnkr.co/edit/7FC8IUvdR3wPevrd48yt?p=preview测试了API但是当我从Postman复制请求代码时,AJAX或XHR请求失败,快递应用程序返回一个未定义的快递体。

网站上的控制台吐出以下内容:

Resource interpreted as Document but transferred with MIME type application/json

请求看起来像这样(AJAX):

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://thedomainhere.com/hello",
  "method": "POST",
  "headers": {
    "content-type": "application/json",
    "cache-control": "no-cache",
    "postman-token": "0158785a-7ff5-f6a3-54ba-8dfc152976fc"
  },
  "data": {
    "senderEmail": "hello@hello.com"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

为什么这会在Postman和控制台中使用Curl,但不能在Web文档中使用?

2 个答案:

答案 0 :(得分:0)

当你尝试制作跨源的ajax时,jQuery首先发出没有POST有效负载的OPTIONS请求,并期望在响应中发送以下头:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept

要在Express中设置响应标头,您可以在开头的某处执行以下中间件(另请参阅setHeader的NodeJS docs

app.use(function(req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'POST');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
    if(req.method == 'OPTIONS') {
        res.end();
    } else {
        next();
    }
});

关于在快递上启用CORS的this帖子也可能有用。

要了解在这种情况下发送OPTIONS的原因,您可以阅读this问题的答案。

这是第一个可能的原因,为什么你会空虚。

还尝试将content-type更改为contentType(如jQuery docs中所示)并在数据中传递字符串

data: JSON.stringify({
    "senderEmail": "hello@hello.com"
})

答案 1 :(得分:0)

您应该像这样将响应类型设置为text / html,例如:

>>> import numpy
>>> yvalues = integrand(numpy.linspace(0,numpy.pi/2,361), 60) 

>>> print(numpy.linspace(0,numpy.pi/2,17))
[ 0.          0.09817477  0.19634954  0.29452431  0.39269908  0.49087385
  0.58904862  0.68722339  0.78539816  0.88357293  0.9817477   1.07992247
  1.17809725  1.27627202  1.37444679  1.47262156  1.57079633]]