【问题标题】:What is the rule for express.static root path?express.static 根路径的规则是什么?
【发布时间】:2016-06-18 09:41:13
【问题描述】:

我跑了

node src/app.js

在mean-to目录中

express.static('public') 

会起作用,为什么?

不需要指定路径?

规则是什么?

我知道

__dirname+'/../public'` 

工作得很好。


只是想确定这里的逻辑

我查了文档 http://expressjs.com/en/starter/static-files.html

它说

“将包含静态资产的目录的名称传递给 express.static 中间件函数以开始直接提供文件。”

"您提供给 express.static 函数的路径是相对于您启动节点进程的目录"

那是什么意思

  1. 如果我在 mean-to 文件夹中运行 node src/app.js --> 使用 express.static('public')
  2. 如果我在 src 文件夹中运行 node app.js => 使用 express.static('../public')

为了安全,最好使用__dirname来获取目录的绝对路径

【问题讨论】:

  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask

标签: javascript node.js express


【解决方案1】:

可能的原因是从比 dir 高一级的目录运行代码?尝试从 src 运行它:

cd src
node app.js

【讨论】:

    【解决方案2】:

    表达静态使用模块path中的resolve函数

    使用path的示例:

    var p = require('path');
    p.resolve('public'); // will return your absolute path for `public` directory
    

    因此 express static 的规则与 path#resolve 函数的规则相同

    您可以在path 模块的文档中查看更多示例


    p.resolve__dirname 有什么区别?

    路径#resolve

    p.resolve() 解析为绝对路径

    path.resolve('public');
    

    将返回public' 目录的绝对路径(例如“C:\projects\myapp\public”)

    path.resolve('src'); // => "C:\projects\myapp\src")
    

    __目录名

    __dirname - 当前运行应用的目录名称(绝对路径)

    文件app.js

    console.log(__dirname);
    

    运行node app.js 将为您的应用打印您的绝对路径,例如“C:\projects\myapp

    【讨论】:

    • p.resolve 和 __dirname 有什么区别?
    【解决方案3】:

    您将 2 行混为一谈...两者都是必要的:

    //This line is to say that the statics files are in public
    app.use(express.static(__dirname + "/public")); 
    
    //This another line is to say that when call the route "/" render a page
    app.get("/", function (req, res) {
      res.send('Hello World!'); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-22
      • 2015-08-09
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多