栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Node.js / Express.js

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node.js / Express.js

注意: 这描述了Express在版本2和版本3中的工作方式。有关Express 4的信息,请参阅本文结尾。


static
只需提供磁盘中的文件( 静态 资源)即可。您给它提供一个路径(有时称为挂载点),它为该文件夹中的文件提供服务。

例如,

express.static('/var/www')
将提供该文件夹中的文件。所以到您的节点服务器的请求,
http://server/file.html
将有助于
/var/www/file.html

router
是运行您的路线的代码。当您执行时
app.get('/user', function(req, res) { ...});
router
实际上是调用回调函数来处理请求。

您将事物传递

app.use
的顺序确定了使每个中间件有机会处理请求的顺序。例如,如果您
test.html
的静态文件夹中有一个名为的文件和一条路由:

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”将发送到浏览器。

通常,您希望将路由器放置在静态中间件 上方 ,以免意外命名的文件无法覆盖您的路由之一。

请注意,如果你不明确

use
router
,它是隐含快递在您定义的路线点添加(这就是为什么你的路线仍然工作,即使你注释掉
app.use(app.router)
)。


评论者提出了关于顺序的另一点,

static
router
我尚未解决:对应用程序整体性能的影响。

use

router
上面的另一个原因
static
是优化性能。如果您放
static
第一把,那么您将在每个单独的请求上访问硬盘驱动器,以查看文件是否存在。在快速测试中,我发现在卸载的服务器上,此开销总计约为1ms。(该数字很可能在负载下更高,因为请求将竞争磁盘访问。)

有了

router
第一次,从来没有匹配的路由请求有打盘,节省了宝贵的毫秒。

当然,有一些方法可以减轻

static
的开销。

最好的选择是将所有静态资源放在特定的文件夹下。(IE

/static
)然后
static
,您可以安装到该路径,以便仅在路径开头为时才运行
/static

app.use('/static', express.static(__dirname + '/static'));

在这种情况下,您可以将其放在上方

router
。如果存在文件,这可以避免处理其他中间件/路由器,但是老实说,我怀疑您会获得这么多。

您还可以使用

staticCache
,它在内存中缓存静态资源,这样您就不必在磁盘上存放常用文件。( 警告:
staticCache
显然将来会被删除。)

但是,我认为不

staticCache
缓存否定答案(当文件不存在时),因此如果您未将其挂载到路径
staticCache
router
而放在上面,这将无济于事。

与所有有关性能的问题一样 ,请对您的实际应用 (在负载下)进行 测量并进行基准测试, 以查看瓶颈所在。


快递4

Express 4.0 删除

app.router
。现在,所有中间件(
app.use
)和路由(
app.get
等)都按照添加它们的精确顺序进行处理。

换一种说法:

所有路由方法将按照它们出现的顺序添加。你不应该 这样

app.use(app.router)
。这样可以消除Express中最常见的问题。

换句话说,混合

app.use()
app[VERB]()
完全 按照它们被调用的顺序工作。

app.get('/', home);app.use('/public', require('st')(process.cwd()));app.get('/users', users.list);app.post('/users', users.create);

阅读有关Express 4中更改的更多信息。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号