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

使用Express.JS发送其他HTTP标头

马天逸
2023-03-14
问题内容

Express.JS提供了一些静态页面。设置很简单:

var app = express();

app.configure(function(){
  app.use(express.static(path.join(application_root, "StaticPages")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

我希望响应包含一个附加的http标头( Access-Control-Allow-Origin:*
)。应该放在哪里?我尝试了以下示例,但是标题仅出现在默认页面上:

app.get('/', function(req, res){
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.send('Hello World');
});

谢谢。


问题答案:

我尝试了以下示例,但标题仅出现在默认页面上

是的,这是因为您仅为GET /路由而不是其他路径定义了它。您应该改为使用中间件。

如果您希望为所有请求设置标题:

app.configure(function(){
  app.use(function(req, res, next) {
    res.setHeader("Access-Control-Allow-Origin", "*");
    return next();
  });
  app.use(express.static(path.join(application_root, "StaticPages")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

如果只想对静态文件夹执行此操作,则没有通用html" target="_blank">方法。您可能可以更改express.static(来自connect.static)。做到这一点的另一种方法是匹配URL并在URL匹配的情况下设置标题。

app.configure(function(){
  app.use(function(req, res, next) {
    var matchUrl = '/StaticFolder';
    if(req.url.substring(0, matchUrl.length) === matchUrl) {
      res.setHeader("Access-Control-Allow-Origin", "*");
    }
    return next();
  });
  app.use(express.static(path.join(application_root, "StaticPages")));
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

注意:中间件必须在路由生效之前,换句话说,您不能将中间件放在静态中间件之后。



 类似资料:
  • 1. 安装protoc命令 下载地址https://github.com/google/protobuf/releases 根据自己系统对应下载 2.安装php protocbuf扩展 通过pecl方式安装 VERSION 目前最新版本为3.5.1.1 sudo pecl install protobuf-3.5.1.1 3.创建test.proto文件 在项目根目录创建Protobuf/Src目

  • 问题内容: 我已经在ES6中使用React.js构建了一个Web应用程序。我目前要创建一个基本的“联系我们”页面,并希望发送电子邮件。我是React的新手,只是发现我实际上不能使用React本身发送电子邮件。我正在使用,但在将示例代码与我的React文件集成时遇到了一些困难。具体来说,调用是可行的,但是我不知道如何将其链接到我的React前端。 Nodemailer:https://github.

  • 问题内容: 我正在写一个可以设置标题的库。如果标题已经发送,我想给出一个自定义错误消息,而不是让它失败并显示Node.js给出的“发送后无法设置标题”消息。那么如何检查标头是否已经发送? 问题答案: 编辑:从Express 4.x开始,您需要使用res.headersSent。 还要注意,您可能要在检查之前使用setTimeout,因为在调用res.send()之后,它不会立即设置为true。资源

  • 问题内容: 我不太确定为什么会收到此错误。这是一个基于express.js的简单API,能够添加和删除帖子。当我触发删除路由器时发生错误。我读到错误通常在有两个回调的情况下发生,但是,我似乎找不到任何双重回调。 这是我的posts.js路由器: 问题答案: 您需要添加“返回”,这样您就不会再次回答。

  • 问题内容: 这是我的用例 我们有一个服务“ foobar”,其中有两个版本, 并且 (都在运行中) 为了实现从到的过渡,我们希望第一次将两个版本放在一起,并在两者上都收到POST请求(因为此中只有一个POST api调用)。 我看到的方式。将是 修改 处理程序开头的代码,以便将请求复制到 但这似乎不那么简单 它失败了 是否有一种众所周知的方法可以将此类操作(即,在不触摸的情况下进行传输)转移到另一

  • 我试图向远程服务器发送HTTP GET请求,并在HTML页面上使用响应。下面是project/js/script.js页面 在我的响应标题中,这是我得到的 远程地址:127.0.0.1:63342 请求URL:localhost:63342/object 请求方法:获取 状态代码:404未找到 请求头 接受:申请/json,文本/平原,/ 接受编码:gzip、deflate、sdch 接受语言:e