0

每当我的应用程序向服务器发送 ajax 请求时:

$.ajax({
    url: config.api.url + '/1/register', 
    type: 'POST', 
    contentType: 'application/json',
    data: /* some JSON data here */,

    /* Success and error functions here*/
});

它发送以下两个请求:

Request URL:https://api.example.com/1/register
Request Method:OPTIONS
Status Code:404 Not Found

其次是适当POST的与所有的数据。由于我这样处理路线:

expressApp.post('/1/register', UserController.register);

并且没有.options这条路线,它总是以404. 几乎所有方法都是一样的。这个问题在接受的答案下方的两个答案中对此进行了一些讨论,但我不太确定该怎么做。

我该如何处理?我应该添加.options路线吗?如果是,它应该怎么做?

4

1 回答 1

6

实际上,我今天刚刚处理了这个问题。这是解决我的问题的要点。


Node.js 跨域 POST。您应该首先响应 OPTIONS 请求。像这样的东西。

if (req.method === 'OPTIONS') {
      console.log('!OPTIONS');
      var headers = {};
      // IE8 does not allow domains to be specified, just the *
      // headers["Access-Control-Allow-Origin"] = req.headers.origin;
      headers["Access-Control-Allow-Origin"] = "*";
      headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
      headers["Access-Control-Allow-Credentials"] = false;
      headers["Access-Control-Max-Age"] = '86400'; // 24 hours
      headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
      res.writeHead(200, headers);
      res.end();
} else {
//...other requests
}

把它放在你对这个问题有要求的任何地方。我将它设置为一个checkIfOption函数变量并像这样调用它:

app.all('/', function(req, res, next) {
  checkIfOption(req, res, next);
});

//...other requests我打电话的地方next();

这对我来说效果很好。

于 2013-07-17T02:34:13.003 回答