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.jsres.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。 有两个简单的方法来做到这一点:

  1. res.sendFile(path.join(__dirname, '../public', 'index1.html'));
  2. res.sendFile('index1.html', { root: path.join(__dirname, '../public') });

注意: __dirname返回当前正在执行的脚本所在的目录。就你而言,它看起来像server.jsapp/ 所以,要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)

想法源于https://stackoverflow.com/a/14594282/6189078

另一种方法是通过编写较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` );