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

使用Express.js服务静态文件和app.get冲突

齐意致
2023-03-14
问题内容

我在这里有这段代码:

var express = require('express')
  , http = require('http')

var app = express();
var server = app.listen(1344);
var io = require('socket.io').listen(server);


app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'secret'}));


app.get('/', function(req, res){
    if(req.session){
        console.log(req.session);
    }
    console.log('ok');

});

app.get()回调内部的代码未被调用。如果我注释掉该app.use(express.static(__dirname + '/public'))行,则回叫有效。我已经尝试过更改订单,但就像抽奖一样!我想知道这里出了什么问题。

我确信这与我对中间件如何调用缺乏知识有关。有人可以帮我理解这个问题吗?

基本上,我只想在提供文件和将index.html加载到浏览器之前执行一些逻辑。通过将道路app.get()的前app.use(express.static())行,没有的伎俩!


问题答案:

您的静态文件中间件应该优先。

app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'secret'}));

并且您还应该为app.router添加用途。

app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'secret'}));
app.use(app.router);

中间件按顺序处理每个请求。因此,如果您index.html的静态文件中有个,则对的请求yourdomain.com/将永远不会到达,app.router因为它们将由静态文件处理程序处理。删除index.html,然后该请求将通过您的app.router



 类似资料:
  • 问题内容: 我想将服务和子目录作为静态文件提供。索引文件应同时在和URL处提供。 我有 但是第二行显然可以处理整个,包括其中的所有文件(不只是and ),我不希望这样。 我也试过 但是访问基本URL 会导致对(双重组件)的请求,这当然会失败。 有任何想法吗? 顺便说一句,我在Express中找不到关于此主题的文档(+它的参数)…令人沮丧。也欢迎使用doc链接。 问题答案: 期望第一个参数是目录的

  • 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; root /data/www.test.com; index index.html index.htm; } 就这些?

  • 问题内容: 我有一个使用socket.io和express的简单node.js应用程序。目前所有的javascript都在HTML文件中,但我想尝试将其分离为.js文件。 在我的主节点应用程序中,我有以下内容: 直到我将javascript从index.html移到.js文件,然后尝试从我的HTML文件中引用它,如下所示: 我认为express无法提供静态文件,因此我尝试了以下方法: 谁能告诉我我

  • 我试着设置nginx来服务我的node.js应用程序静态文件。问题是,当我试图得到我的文件时,我的状态是403禁止的。 当我尝试下载一个文件从 /root/appJs/public/css/style.css我写http://sitename.com/css/style.css我retive 403禁忌状态。我已经在一些论坛上寻找解决方案,但没有

  • 我从Apache切换到Nginx,使用apache,皮肤文件夹中的所有静态文件(图像、css、javascript)都直接由Apache提供服务。 示例: 我读了一些关于Nginx和Plone的文档,但我没有看到。下面是Plone.orgconf的例子:https://github.com/plone/plone-org-nginx/blob/master/nginx.conf 所以,我的问题是:

  • 问题内容: 我想像通常那样处理静态文件,但像通常那样处理动态路由 其中一位开发人员在此评论中提出了解决方案,但我不清楚他的意思。 问题答案: 好的。我在Express的response object 的源代码中找到了一个示例。这是该示例的稍作修改的版本。 它使用该方法。 注意 :安全性更改要求使用此选项。