res.sendFile绝对path
如果我做了
res.sendfile('public/index1.html');
然后我得到一个服务器控制台警告
明确反对
res.sendfile
:改为使用res.sendFile
但它在客户端运行良好。
但是当我改变它
res.sendFile('public/index1.html');
我得到一个错误
TypeError:path必须是绝对的,或者指定root到
res.sendFile
和index1.html
不呈现。
我无法弄清楚什么是绝对path。 我有public
目录在server.js
相同的水平。 我正在从server.js
做res.sendFile
。 我也宣布了app.use(express.static(path.join(__dirname, 'public')));
添加我的目录结构:
/Users/sj/test/ ....app/ ........models/ ....public/ ........index1.html
这里指定的绝对path是什么?
我正在使用Express 4.x.
express.static
中间件与res.sendFile
是分开的,因此使用绝对path将其初始化为public
目录将不会对res.sendFile
执行任何操作。 你需要使用res.sendFile
直接使用绝对path。 有两个简单的方法来做到这一点:
-
res.sendFile(path.join(__dirname, '../public', 'index1.html'));
-
res.sendFile('index1.html', { root: path.join(__dirname, '../public') });
注意: __dirname
返回当前正在执行的脚本所在的目录。就你而言,它看起来像server.js
在app/
。 所以,要public
,您需要先退出一个级别: ../public/index1.html
public
/ ../public/index1.html
。
注意: path
是一个内置的模块 ,需要对上述代码进行工作: var path = require('path');
试试这个:
res.sendFile('public/index1.html' , { root : __dirname});
这对我有效。 根:__ dirname将取上面示例中server.js的地址,然后转到index1.html(在这种情况下),返回的path是到达公用文件夹所在的目录。
res.sendFile( __dirname + "/public/" + "index1.html" );
其中__dirname
将pipe理当前正在执行的脚本( server.js
)所在目录的名称。
另一个还没有被列出来的工作对我来说就是简单地使用path.resolve
,不pipe是单独的string,还是整个path:
// comma separated app.get('/', function(req, res) { res.sendFile( path.resolve('src', 'app', 'index.html') ); });
要么
// just one string with the path app.get('/', function(req, res) { res.sendFile( path.resolve('src/app/index.html') ); });
(节点v6.10.0)
另一种方法是通过编写较less的代码来完成此操
app.use(express.static('public')); app.get('/', function(req, res) { res.sendFile('index.html'); });
我试过这个,它的工作。
app.get('/', function (req, res) { res.sendFile('public/index.html', { root: __dirname }); });
process.cwd()
返回你的项目的绝对path。
然后 :
res.sendFile( `${process.cwd()}/public/index1.html` );