express.static根路径的规则是什么?

时间:2016-03-04 15:24:33

标签: javascript node.js express

我跑了

node src/app.js

在mean-to目录

express.static('public') 

会起作用,为什么?

不需要指定路径?

规则是什么?

我知道

__dirname+'/../public'` 

工作正常。

enter image description here

只想确定这里的逻辑

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

它说

  

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

     

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

这是否意味着

  1. 如果我在 mean-to folder 中运行 node src / app.js - >使用express.static('public')
  2. 如果我在 src文件夹中运行节点app.js =>使用express.static('../ public')
  3. 为了安全起见,最好使用 __ dirname 来获取目录的绝对路径

3 个答案:

答案 0 :(得分:2)

Express static使用模块path

中的resolve函数

使用path的示例:

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

因此,表达静态的规则与path#resolve函数

的规则相同

您可以在path模块

的文档中查看更多示例
  

p.resolve__dirname之间的区别是什么?

路径#决心

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"

答案 1 :(得分:0)

你将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!'); 
}

答案 2 :(得分:-2)

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

cd src
node app.js