为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错
Posted
技术标签:
【中文标题】为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错【英文标题】:Why do I get an error when I serve a static file for two routes in node.js using sendFile() method为什么我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错 【发布时间】:2019-08-01 09:43:36 【问题描述】:我尝试为两个路由“/”和“/test”发送静态 html 文件。 它适用于“/”路线,但不适用于“/test”/
我收到以下错误:
TypeError: path must be absolute or specify root to res.sendFile
at ServerResponse.sendFile (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\response.js:421:11)
at E:\sairam\javascript\node\Node middleware\index.js:11:9
at Layer.handle [as handle_request] (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\layer.js:95:5)
at next (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\layer.js:95:5)
at E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\index.js:281:22
at Function.process_params (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\index.js:335:12)
at next (E:\sairam\javascript\node\Node middleware\node_modules\express\lib\router\index.js:275:10)
at SendStream.error (E:\sairam\javascript\node\Node middleware\node_modules\serve-static\index.js:121:7)
这是我的 app.js
let express = require('express');
let app = express();
app.use(express.static('public'));
app.get('/', function(req,res)
res.sendFile('index.html');
res.end();
)
app.get('/test', function(req,res)
res.sendFile('index.html');
res.end();
)
app.listen(3000);
index.html 文件位于公用文件夹中.. 用作静态容器。
【问题讨论】:
node.js TypeError: path must be absolute or specify root to res.sendFile [failed to parse JSON]的可能重复 【参考方案1】:如果你想为res.sendFile 使用相对路径,你需要指定root 选项。使用以下代码为index.html
提供服务,假设它与 Node 应用程序源位于同一目录中。
你可以通过__dirname获取当前目录。
app.get('/', function(req,res)
res.sendFile('index.html',root:__dirname);
)
app.get('/test', function(req,res)
res.sendFile('index.html',root:__dirname);
)
也请参考node.js TypeError: path must be absolute or specify root to res.sendFile [failed to parse JSON]
(感谢 Saurabh Mistry 的参考)
【讨论】:
【参考方案2】:试试这个方法:
app.get(['/','test'], function(req,res)
res.sendFile(__dirname + '/public/'+ 'index.html');
);
【讨论】:
以上是关于为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)
为啥我在 s3 上的访问被拒绝(使用适用于 Node.js 的 aws-sdk)?