• 理解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

    github中demo

  • 相关阅读:
    SQL Server 查看新建、重建、重组索引进度
    CentOS PostgreSQL 12 主从复制(主从切换)
    CentOS PostgreSQL 12 安装
    SQL Server 当前事务无法提交,而且无法支持写入日志文件的操作。
    MySQL 碎片整理
    MySQL 5.7 MHA(mha4mysql-manager依赖包)
    MySQL- 5.7 sys schema
    MySQL InnoDB 恢复(recovery)详细流程
    MySQL学习(二十五)order by 逻辑
    jvm学习(一)DirectByteBuffer堆外内存浅析
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/8997744.html
Copyright © 2020-2023  润新知