- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在问之前app.router
我想我应该至少解释一下我认为在使用中间件时会发生什么。使用中间件,使用的函数是app.use()
.当中间件正在执行时,它会使用 next()
调用下一个中间件。或者让它不再调用中间件。这意味着我放置中间件调用的顺序很重要,因为一些中间件依赖于其他中间件,而接近末尾的一些中间件甚至可能不会被调用。
今天我正在处理我的应用程序,并让我的服务器在后台运行。我想进行一些更改并刷新我的页面并立即查看更改。具体来说,我正在更改我的布局。我无法让它工作,所以我在 StackOverflow 上搜索答案,找到了 this question .它说要确保express.static()
在下面 require('stylus')
.但是当我查看那个 OP 的代码时,我看到他有他的 app.router
在他的中间件调用的最后调用,我试图弄清楚为什么会这样。
当我制作 Express.js 应用程序(版本 3.0.0rc4)时,我使用了命令 express app --sessions --css stylus
在我的 app.js 文件中,代码随我的 app.router
一起设置以上两个express.static()
和 require('stylus')
调用。所以看起来,如果它已经设置成这样,那么它应该保持这种状态。
重新安排我的代码以便我可以看到我的 Stylus 更改后,它看起来像这样:
app.configure(function(){
//app.set() calls
//app.use() calls
//...
app.use(app.router);
app.use(require('stylus').middleware(__dirname + '/public'));
app.use(express.static(__dirname + '/public', {maxAge: 31557600000}));
});
app.get('/', routes.index);
app.get('/test', function(req, res){
res.send('Test');
});
app.router
很重要。在我的代码中。所以我把它注释掉,启动我的应用程序并导航到
/
.它显示我的索引页就好了。嗯,也许它起作用了,因为我从我的路由文件(routes.index)中导出路由。所以接下来我导航到
/test
并在屏幕上显示测试。哈哈,好吧,我不知道是什么
app.router
做。无论是否包含在我的代码中,我的路由都很好。所以我肯定错过了一些东西。
app.router
它的重要性,以及我应该将它放在我的中间件调用中的什么位置?如果我能得到关于
express.static()
的简要说明也很好.据我所知,
express.static()
是我信息的缓存,如果应用程序找不到请求的页面,它会检查缓存是否存在。
最佳答案
注:这描述了 Express 在版本 2 和 3 中的工作方式。有关 Express 4 的信息,请参阅本文末尾。static
简单地从磁盘提供文件(静态资源)。你给它一个路径(有时称为挂载点),它为该文件夹中的文件提供服务。
例如,express.static('/var/www')
将提供该文件夹中的文件。所以向您的 Node 服务器发出 http://server/file.html
的请求将服务 /var/www/file.html
.router
是运行您的路线的代码。当您这样做时app.get('/user', function(req, res) { ... });
,它是 router
实际上调用回调函数来处理请求。
您将东西传递给 app.use
的顺序确定每个中间件有机会处理请求的顺序。例如,如果您有一个名为 test.html
的文件在您的静态文件夹和 route :
app.get('/test.html', function(req, res) {
res.send('Hello from route handler');
});
哪个被发送到请求
http://server/test.html
的客户端?将哪个中间件提供给
use
第一的。
app.use(express.static(__dirname + '/public'));
app.use(app.router);
然后提供磁盘上的文件。
app.use(app.router);
app.use(express.static(__dirname + '/public'));
然后路由处理程序收到请求,并将“Hello from route handler”发送到浏览器。
use
router
,它是由 Express 在您定义路线时隐式添加的(这就是为什么即使您注释掉
app.use(app.router)
,您的路线仍然有效的原因)。
static
的顺序的另一点和
router
我没有提到:对应用整体性能的影响。
use
router
以上
static
是为了优化性能。如果你把
static
首先,您将在每次请求时访问硬盘驱动器以查看文件是否存在。在
quick test ,我发现在卸载的服务器上,这个开销总计约 1 毫秒。 (这个数字很可能在负载下更高,请求将竞争磁盘访问。)
router
首先,匹配路由的请求永远不必访问磁盘,从而节省了宝贵的毫秒数。
static
的开销。
/static
) 然后你可以挂载
static
到该路径,以便它仅在路径以
/static
开头时运行:
app.use('/static', express.static(__dirname + '/static'));
在这种情况下,您可以将其放在
router
上方.如果存在文件,这可以避免处理其他中间件/路由器,但老实说,我怀疑您会获得那么多。
staticCache
,它将静态资源缓存在内存中,这样您就不必为经常请求的文件访问磁盘。 (
警告:
staticCache
will apparently be removed 以后。)
staticCache
缓存否定答案(当文件不存在时),因此如果您放置了
staticCache
也无济于事以上
router
无需将其安装到路径上。
app.router
.现在,所有中间件(
app.use
)和路由(
app.get
等)都按照添加它们的顺序进行处理。
All routing methods will be added in the order in which they appear. You should not do
app.use(app.router)
. This eliminates the most common issue with Express.In other words, mixing
app.use()
andapp[VERB]()
will work exactly in the order in which they are called.app.get('/', home);
app.use('/public', require('st')(process.cwd()));
app.get('/users', users.list);
app.post('/users', users.create);
关于Node.js/Express.js - app.router 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12695591/
我正在学习构建单页应用程序 (SPA) 所需的所有技术。总而言之,我想将我的应用程序实现为单独的层,其中前端仅使用 API Web 服务(json 通过 socket.io)与后端通信。前端基本上是
当我看到存储在我的数据库中的日期时。 这是 正常 。日期和时间就是这样。 但是当我运行 get 请求来获取数据时。 此格式与存储在数据库 中的格式不同。为什么会发生这种情况? 最佳答案 我认为您可以将
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在尝试使用backbone.js 实现一些代码 和 hogan.js (http://twitter.github.com/hogan.js/) Hogan.js was developed ag
我正在使用 Backbone.js、Node.js 和 Express.js 制作一个 Web 应用程序,并且想要添加用户功能(登录、注销、配置文件、显示内容与该用户相关)。我打算使用 Passpor
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我尝试在 NodeJS 中加载数据,然后将其传递给 ExpressJS 以在浏览器中呈现 d3 图表。 我知道我可以通过这种方式加载数据 - https://github.com/mbostock/q
在 node.js 中,我似乎遇到了相同的 3 个文件名来描述应用程序的主要入口点: 使用 express-generator 包时,会创建一个 app.js 文件作为生成应用的主要入口点。 通过 n
最近,我有机会观看了 john papa 关于构建单页应用程序的精彩类(class)。我会喜欢的。它涉及服务器端和客户端应用程序的方方面面。 我更喜欢客户端。在他的实现过程中,papa先生在客户端有类
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一个图形新手,需要帮助了解各种 javascript 2D 库的功能。 . . 我从 Pixi.js 中得到了什么,而我没有从 Konva 等基于 Canvas 的库中得到什么? 我从 Konva
我正在尝试将一些 LESS 代码(通过 ember-cli-less)构建到 CSS 文件中。 1) https://almsaeedstudio.com/ AdminLTE LESS 文件2) Bo
尝试查看 Express Passport 中所有登录用户的所有 session ,并希望能够查看当前登录的用户。最好和最快的方法是什么? 我在想也许我可以在登录时执行此操作并将用户模型数据库“在线”
我有一个 React 应用程序,但我需要在组件加载完成后运行一些客户端 js。一旦渲染函数完成并加载,运行与 DOM 交互的 js 的最佳方式是什么,例如 $('div').mixItUp() 。对
请告诉我如何使用bodyparser.raw()将文件上传到express.js服务器 客户端 // ... onFilePicked(file) { const url = 'upload/a
我正在尝试从 Grunt 迁移到 Gulp。这个项目在 Grunt 下运行得很好,所以我一定是在 Gulp 中做错了什么。 除脚本外,所有其他任务均有效。我现在厌倦了添加和注释部分。 我不断收到与意外
我正在尝试更改我的网站名称。找不到可以设置标题或应用程序名称的位置。 最佳答案 您可以在 config/ 目录中创建任何文件,例如 config/app.js 包含如下内容: module.expor
经过多年的服务器端 PHP/MySQL 开发,我正在尝试探索用于构建现代 Web 应用程序的新技术。 我正在尝试对所有 JavaScript 内容进行排序,如果我理解得很好,一个有效的解决方案可以是服
我是 Nodejs 的新手。我在 route 目录中有一个 app.js 和一个 index.js。我有一个 app.use(multer....)。我还定义了 app.post('filter-re
我正在使用 angular-seed用于构建我的应用程序的模板。最初,我将所有 JavaScript 代码放入一个文件 main.js。该文件包含我的模块声明、 Controller 、指令、过滤器和
我是一名优秀的程序员,十分优秀!