此篇文章转载于

express框架中的express.static()和app.use()

Express框架在使用app.use中传入express.static设置静态路由时,这个文件夹下的所有文件夹和文件都会变成路由文件,也就是说当在URL输入该路径时,会直接捕捉到该请求。

在使用express框架的时候,我们会遇到设置静态文件目录,代码如下

//将静态文锦啊目录设置为:项目根目录+/public
app.use(express.static(__dirname +"/public"))
app.use(express.static(path.join(__dirname,"public")))

那么,什么是静态文件资源?以及express是怎么利用这句话来设置静态目录的

静态资源文件

可以理解成,对于不同的用户来说,内容都不会变化的文件,他们所接受看到的图片,css,前端js文件都是一样的,我们称这类文件为静态资源文件。这些都是前端开发完给到后端的

动态资源文件

而张三李四登录百度,百度会分别对他们显示”你好张三”、”你好李四”,那么负责这么动态逻辑的文件就是动态文件了,根据你使用的技术不同,动态文件可能是.jsp文件、php文件或者我们node.js的服务器端js文件。

app.use()

将指定的一个或多个中间件函数安装在指定的路径上:当所请求路径的基数匹配时,将执行中间件函数path

可以理解为 app.use是用来给path注册中间函数的,这个path的默认是 /, 也就是处理用户的任何url请求。同时会处理path下的子路径:

比如设置path为“/hello” 那么当请求路径为“/hello/” “/hello/nihao”等等这样的请求,都会交给中间函数处理的。

于是我们现在知道了app.use(express.static(__dirname + ‘/public’))是将所有的请求,先交给express.static(__dirname + ‘/public’)来处理一下。express.static()的返回值肯定是一个函数

express.static()

为了提供对静态资源文件(图片,css,js)的服务。一般用Express内置的中间函数express。static

传递一个包含静态资源的目录给express.static中间件用于立刻开始提供文件。比如如下代码来提供public目录下的图片,css,js文件

app.use(express.static("public"))

express会在静态资源目录下查找文件,所以不需要把静态目录public作为url的一部分。

现在可以加载public目录下的文件了

http://localhost:3000/hello.html
http://localhost:3000/images/1.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/index.js

可以多次使用express.static添加多个静态资源目录,express会按照目录的顺序查找静态资源文件

app.use(express.static("static"))
app.use(express.static("public"))

为了给静态资源文件创建一个虚拟的文件前缀(实际文件系统中并不存在),可以使用express.static函数指定一个虚拟的静态目录,就像下面

app.use("/static", express.static("public"))

现在可以用/static作为前缀来加载public文件夹下的子文件了

http://localhost:3000/static/hello.html
http://localhost:3000/static/images/1.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/index.js

然后,你提供给express.static函数的路径是一个相对node进程启动位置的相对路径。

如果你在其他的文件夹中启动express app,更稳妥的方式是是用静态资源文件夹的绝对路径

app.use("/static", express.static(__dirname + "/public"))

node/静态路由/express框架中的express.static()和app.use()的更多相关文章

  1. node+express框架中连接使用mysql经验总结

    最近在学习node.js,做了一个练手项目,使用node.js+express框架,配合mysql数据库和前端vue框架开发一个多人文档编辑系统. koa,express,node 通用方法连接MyS ...

  2. express框架中router组件的app.use和app.get

    首先看例子: var express = require('express'); var router = express.Router(); var index = require('./route ...

  3. nodejs express 框架解密2-如何创建一个app

    本文是基于express 3.4.6 的 1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function( ...

  4. Express框架中如何引用ejs模板引擎

    1.如何在项目中安装ejs模板引擎 在NodeJS指南中利用利用以下命令建立网站的基本结构: express -t ejs microblog 运行这个命令后继续运行 cd microblog &am ...

  5. express框架中使用nodemon自启动服务

    1.安装nodemon //全局安装 npm install -g nodemon //本地安装 npm install nodemon --save 2.修改package.json配置 " ...

  6. express框架中如何只执行一次res响应操作

    在做东西时候遇到一个可能会重复输出res.json的地方,重复输出会产生Error:Cannot set header after they are sent. Node.js不像c++里可以直接通过 ...

  7. 71.用express框架,出现 express.Router is not a function

    Express版本太久

  8. node之Express框架

    Express是node的框架,通过Express我们快速搭建一个完整的网站,而不再只是前端了!所以Express还是非常值得学习的! express有各种中间件,我们可以在官方网站查询其用法. Ex ...

  9. node -- express框架

    express node的一个框架 安装express cnpm install express -S 引入 const express = require("express"); ...

随机推荐

  1. 实验吧-密码学-Fair-Play(Playfair解密)

    这个题是Playfair解密. Playfair解密算法首先将密钥填写在一个5*5的矩阵中(去Q留Z),矩阵中其它未用到的字母按顺序填在矩阵剩余位置中,根据替换矩阵由密文得到明文. 对密文解密规则如下 ...

  2. JS笔记03

    JS图片库 标记 需求效果: 网页中的图片链接显示在网页中的图片框内部而不是打开新的页面 //html部分 <!DOCTYPE html> <html> <head> ...

  3. js模式-观察者模式

    // 主题,接收状态变化,触发每个观察者 class Subject { constructor() { this.state = 0 this.observers = [] } getState() ...

  4. Android file内部存储

    通过file=openFileOutput()获得,将数据存储在data/data/+包名+files下面. 代码如下: MainActivity.java: import android.os.Bu ...

  5. C++ STD Gems04

    count.count_if.all_of.any_of.none_of #include <iostream> #include <vector> #include < ...

  6. ACM&OI 基础数学算法专题

    [前言] 本人学习了一定时间的算法,主要精力都花在数学类的算法上面 而数学类的算法中,本人的大部分精力也花费在了数论算法上 此类算法相对抽象,证明过程比较复杂 网络上的博客有写得非常好的,但也有写得不 ...

  7. 微服务基础——厉害了!API网关

    微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...

  8. 算法设计和分析(Prim算法构建最小生成树)

    问题: 给定无向图G(N,M)表明图G有N个顶点,M条边,通过Prim算法构造一个最小生成树 分析: 算法流程: 构造好的最小生成树就是step6 运行代码: #include<cstdio&g ...

  9. 家中WIFI被人用WiFi万能钥匙共享后,我们应该怎么做?

    据之前WiFi万能钥匙官方称,其用户总数已经超过了8亿,且日活用户达到2亿,在海量APP中仅次于微信和QQ.可以想象有着数量如此庞大的用户,家里的WiFi是如何的"不保险". 而据 ...

  10. javacv 设置帧率(续)

    前文地址:https://www.cnblogs.com/svenwu/p/9663038.html 前文已经对大多数正常情况可以支持了,但是我最近处理一些公司的视频流,发现一些坑爹的情况 每次给的视 ...