当前位置: 首页 > 面试题库 >

允许对Heroku上的Express / Node.js应用程序进行CORS REST请求

程谦
2023-03-14
问题内容

我已经在node.js的快速框架上编写了REST
API,该API可以处理来自Chrome中的js控制台的请求以及URL栏等。现在,我正尝试使其针对来自另一个应用程序的请求工作,域(CORS)。

javascript前端自动发出的第一个请求是对/ api / search?uri =的,并且似乎在“预检” OPTIONS请求上失败。

在我的快速应用中,我使用以下命令添加了CORS标头:

var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

    // intercept OPTIONS method
    if ('OPTIONS' == req.method) {
      res.send(200);
    }
    else {
      next();
    }
};

和:

app.configure(function () {
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(allowCrossDomain);
  app.use(express.static(path.join(application_root, "public")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

从Chrome控制台中,我得到以下标题:

请求网址:http://furious-night-5419.herokuapp.com/api/search?uri =
http%3A%2F%2Flocalhost%3A5000%2Fcollections%2F1%2Fdocuments%2F1

请求方法:OPTIONS

状态码:200 OK

请求标题

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:origin, x-annotator-auth-token, accept
Access-Control-Request-Method:GET
Connection:keep-alive
Host:furious-night-5419.herokuapp.com
Origin:http://localhost:5000
Referer:http://localhost:5000/collections/1/documents/1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5

查询字符串参数

uri:http://localhost:5000/collections/1/documents/1

响应标题

Allow:GET
Connection:keep-alive
Content-Length:3
Content-Type:text/html; charset=utf-8
X-Powered-By:Express

这看起来像API应用程序发送的标题不足吗?

谢谢。


问题答案:

我已经在干净的ExpressJS应用上检查了您的代码,它正常工作。

尝试将您app.use(allowCrossDomain)移至配置功能的顶部。



 类似资料:
  • 问题内容: 我已经配置了SSL enpoint,并且可以确认它正在工作。当我进入日志时,会看到以下内容: 我试图追踪有关退出代码143的一些信息,以及为什么所有进程都被停止。签出以下服务器文件: 感谢您的提前反馈。如果需要,我可以提供更多详细信息。 ------解决方案(编辑)------- 请参阅下面的答案。 问题答案: 我在这里找到了答案:ExpressJS节点HTTPS服务器上的Heroku

  • 问题内容: 我已经编写了一个基本的node.js应用程序,并且设法将其部署在Heroku上没有任何问题。我创建了 package.json 和 Procfile ,但是从日志中看到没有正在运行的进程,因此无法获得任何响应。可能是什么问题呢? PS: 我不想使用 Express 框架 我的代码: 我的package.json: 日志: 问题答案: 您已缩放heroku应用程序了吗? 这是必需的步骤。

  • 我在Heroku上设置了一个express项目,在vercel上设置了一个react前端。当我从前端发出请求时,会出现以下错误: 在'https://helpr-dev.herokuapp.com/users/register'从原点'https://helpr-front.vercel.app“”已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access con

  • 问题内容: 我正在使用带有Mongoose ORM的MongoDB在Node.js / Express中构建一个基本博客。 我有一个预“保存”钩子,可以用来为我自动生成一个博客/想法。除在我要查询的部分之前,我想查询一下是否有其他现有的帖子,然后再继续操作,这一切都很好。 但是,似乎无法访问.find或.findOne(),因此我不断收到错误消息。 解决此问题的最佳方法是什么? 问题答案: 不幸的

  • 2020-06-26T09:26:58.880610+00:00Heroku[web.1]:状态从开始更改为>崩溃2020-06-26T12:16:58.291701+00:00Heroku[web.1]:状态从崩溃更改为>开始2020-06-26T12:17:05.611518+00:00Heroku[web.1]:用命令启动进程>2020-06-26T12:17:08.625648+00:00

  • 问题内容: 我们的自动化版本正在Jenkins上运行。构建本身在从属服务器上运行,并且从属服务器通过SSH执行。 我收到一个错误: 我已经尝试了到目前为止在其他帖子中看到的所有建议: 签名前立即使用安全性解锁钥匙串以解锁钥匙串。 将签名密钥移到其自己的钥匙串中。 将签名密钥移到登录密钥链中。 将签名密钥移到系统密钥链中。 手动将列表钥匙串设置为仅包含钥匙的钥匙串。 在所有情况下,我都会遇到相同的错