【问题标题】: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 文件位于公用文件夹中.. 用作静态容器。

【问题讨论】:

标签: javascript node.js express


【解决方案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');
    });
    

    【讨论】:

      猜你喜欢
      • 2019-06-14
      • 2015-03-13
      • 2017-07-27
      • 2019-05-07
      • 2012-07-13
      • 2010-11-12
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      相关资源
      最近更新 更多