为啥我在 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() 方法为两个路由提供静态文件时会出错的主要内容,如果未能解决你的问题,请参考以下文章

res.sendFile 不是 Node.js 的函数

为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)

为啥我在 s3 上的访问被拒绝(使用适用于 Node.js 的 aws-sdk)?

为啥我在 Node.js 上有 NaN?

为啥 Node.js 通常使用 'var' 而不是 'let'?

为啥我的 javascript (node.js) 给了我不正确的时间戳?