理解Express express.static 和 __direname 及 __firename的含义
理解Express express.static 和 __direname 及 __firename的含义
一:理解 app.use(express.static(__direname + '/public'));
将静态资源文件所在的目录作为参数传递给 express.static中间件就可以提供静态资源文件的访问,比如在public目录放了css,images, 和 javascript文件,我们就可以如上的写法。
当然我们也可以如下写法:
app.use(express.static(path.join(__dirname, 'public')));
先看下项目的目录结构如下:
### 目录结构如下:
demo # 工程名
| |--- public
| | |---js
| | | |-- index.js
| | |--- index.css
| | |--- index.html
| |--- server.js
| |--- .gitignore
server.js 代码如下:
var express = require('express');
var app = express();
var path = require('path');
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
  res.send("aaa");
});
app.listen(3000, (req, res) => {
  console.log('app is running at port 3000');
});
使用命令行,进入项目的根目录后,输入命令 node server.js 后,启动服务器;
那么现在我们就可以这样访问文件了;
http://127.0.0.1:3000/js/index.js
http://127.0.0.1:3000/index.css
如果我们的静态资源放在多个目录下面,我们可以多次调用express.static中间件;如:
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'common')));
如果我们希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,
可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:
app.use('/static', express.static(path.join(__dirname, 'public')));
那么现在访问资源文件变成如下:
http://127.0.0.1:3000/static/index.css
http://127.0.0.1:3000/static/js/index.js
二:理解__filename变量
在任何文件模块内部,可以使用__filename变量获取当前模块文件的带有完整路径的文件名。
比如现在在 server.js 代码加入如下代码:
var tt = require('./js/index.js');
然后在js/index.js 代码加入如下代码:
console.log(__filename);
在项目的根目录继续输入 node server.js , 在命令行中会显示完整的路径文件名:
/Users/tugenhua/个人demo/node0420/express-static/public/js/index.js
三: 理解__dirname变量
在任何模块文件内部,可以使用__direname变量获取当前模块文件所在目录的完整绝对路径。操作和上面一样,在index.js继续加入如下代码:
console.log(__dirname);
如下打印结果:
/Users/tugenhua/个人demo/node0420/express-static/public/js
理解Express express.static 和 __direname 及 __firename的含义的更多相关文章
- 深入理解final和static关键字
		
深入理解final和static关键字 参考:http://blog.csdn.net/qq1028951741/article/details/53418852 final关键字 final关键字可 ...
 - 理解 php new static
		
今天在看 Laravel 的容器(Container)实现时,发现了这么一段突然不能理解的代码: ** * Set the globally available instance of the con ...
 - nodejs-日常练习记录-使用express搭建static服务器.
		
cd C:\wxg\test\node_demo\myapp nvmw use 0.12.1 node static.js var express = require('express'); var ...
 - 深入理解java的static关键字
		
static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...
 - 简单理解JVM与static{}
		
参考如下 http://www.cnblogs.com/lao-liang/p/5110710.html http://blog.csdn.net/newjerryj/article/details/ ...
 - [Node.js]24. Level 5: Express, Express routes
		
Create an express route that responds to GET requests at the URL /tweets that responds with the file ...
 - 内联函数:static inline 和 extern inline 的含义
		
引入内联函数的目的是为了解决程序中函数调用的效率问题. 函数是一种更高级的抽象.它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现:函数的引入可以减少程序的目标代码,实现程序代 ...
 - C#中static void Main(string[] args)的含义
		
static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. ...
 - Express static 托管静态文件 理解
		
今天偶尔看了一下服务端渲染,遇到了express.static, 在以前学习webpack配置服务端渲染时,也使用express.static 中间件,两者配置不太一样,由于当时也没有认真学,所以 一 ...
 
随机推荐
- 【协议】4、http状态码
			
10.4 客户错误 4xx 状态代码4xx类是专门使用在客户看上去错误的情形下的.除非当应答一个HEAD请求时,服务器因该有一个包括错误情形的解释的实体,以及它是否一个临时或者终了的条件.这些状态编码 ...
 - Netty网络聊天(一) 聊天室实战
			
首发地址; Netty网络聊天(一) 聊天室实战 之前做过一个IM的项目,里面涉及了基本的聊天功能,所以注意这系列的文章不是练习,不含基础和逐步学习的部分,直接开始实战和思想引导,基础部分需要额外的去 ...
 - nginx重启服务
			
修改完nginx配置后,需要使用 nginx -s reload使修改的配置生效,配置生效是平滑的,不会对访问产生任何影响reload后会启动新的进程接受新请求,对于未处理完的请求还是用老的配置,直到 ...
 - blfs(systemv版本)学习笔记-配置远程访问和管理lfs系统
			
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/ren ...
 - maven 技巧
			
M2Eclipse Releases maven eclipse插件最新安装地址 Full Version Tag 1.0 2011-06-22 http://download.eclipse.org ...
 - 教你如何使用云服务器去搭建SS
			
注册云服务器 (首先推荐Vultr,注册链接:https://www.vultr.com/?ref=6962741,其他云服务商如阿里云HK,Linode等亦可使用,按需选择) 这里拿Vultr举例: ...
 - JMeter 检查点之响应断言(Response Assertion)
			
检查点之响应断言(Response Assertion) by:授客 QQ:1033553122 JMeter断言用于对sampler(采样器)进行额外检查,且在相同作用域中,每执行完一个samp ...
 - Selenium Webdriver 动态设置 Proxy
			
Step 1: Visiting "about:config" driver.get("about:config"); Step 2 : Run script ...
 - C# Aspose.Cells方式导入Excel文件
			
读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...
 - 始终使用属性(Property),而不是字段(Data Member)
			
1.始终使用属性(Property),而不是字段(Data Member) C# 属性已经晋升为一等公民,如果你的类中还有public的字段,Stop.访问属性和字段的方式是一样的,但是属性是用方法( ...