此篇文章转载于

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. FindWindowXG

    测试: 函数代码: function FindWindowXG(strClass, strTitle: string): THandle; var hd: THandle; arrClass: ..] ...

  2. scala 语言特性

    Scala 语言特性 Unit 表示无值, 等价于java, C++中的void Null 表示空值或空引用 Nothing 所有其他类型的子类型, 表示没有值 Any 所有类型的超类, 任何实例都属 ...

  3. VM ESXi虚拟化使用学习笔记

    由于疫情原因,没有条件介绍安装部分的内容,也没有安装部分内容的相关截图,所以安装部分可以选择网上资料.但是只要熟练安装CentOS系统的,基本安装ESXi一看就会,设置主机地址方面有一定图形化界面,比 ...

  4. 吴裕雄--天生自然C++语言学习笔记:C++ 数据结构

    C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项. 结构用于表示一条记录,假设想要跟踪图书馆中书本的动态,可能需要 ...

  5. 51nod 1201:整数划分 超级好的DP题目

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} { ...

  6. 分享几个IntelliJ IDEA 2019 jihuo码(pojie码、zhuce码),亲测可用

    文章转载自:https://www.jiweichengzhu.com/article/eb340e382d1d456c84a1d190db12755c 如果还有问题,加群交流:686430774(就 ...

  7. jquery判断当前浏览器是否是IE

    if (window.ActiveXObject || "ActiveXObject" in window){ layer.msg("This page does not ...

  8. 利用方法HttpUtility.HtmlEncode来预处理用户输入

    利用方法HttpUtility.HtmlEncode来预处理用户输入.这样能阻止用户用链接注入JavaScript代码或HTML标记,比如//Store/Broswe?Genre=<script ...

  9. Chrome在新版MacOS上报错 NET::ERR_CERT_WEAK_KEY 解决方法

    现象 原文链接 证书详情: 原因 参考苹果官网给出的提示(https://support.apple.com/en-us/HT210176): RSA秘钥长度必须>=2048,小于这个长度的将不 ...

  10. 日志处理中一些shell命令技巧

    日志处理中一些shell命令技巧 阴差阳错的做的日志分析,前途未卜的这段日子,唯一还有点意思的可能就是手动的处理大量日志.总结一下. 日志文件的输入是动则几个G的文本.从N个这样的文件中得到一个列表, ...