当我使用sendfile()方法为两个路由的两个路由提供静态文件时,为什么会遇到错误



我试图为两个路由'/'和"/test"发送静态HTML文件。它适用于'/'路线,但不是'/test'/

我正在得到以下错误:

TypeError: path must be absolute or specify root to res.sendFile
    at ServerResponse.sendFile (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibresponse.js:421:11)
    at E:sairamjavascriptnodeNode middlewareindex.js:11:9
    at Layer.handle [as handle_request] (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterlayer.js:95:5)
    at next (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterroute.js:137:13)
    at Route.dispatch (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterroute.js:112:3)
    at Layer.handle [as handle_request] (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterlayer.js:95:5)
    at E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterindex.js:281:22
    at Function.process_params (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterindex.js:335:12)
    at next (E:sairamjavascriptnodeNode middlewarenode_modulesexpresslibrouterindex.js:275:10)
    at SendStream.error (E:sairamjavascriptnodeNode middlewarenode_modulesserve-staticindex.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文件在公共文件夹中。

如果要使用相对路径进行res.sendfile,则需要指定root选项。假设它与节点应用程序源相同的目录。

,使用以下代码使用index.html

您可以使用__dirname获得当前目录。

app.get('/', function(req,res){
    res.sendFile('index.html',{root:__dirname});
})
app.get('/test', function(req,res){
    res.sendFile('index.html',{root:__dirname});
})

(感谢Saurabh Mistry的参考)

尝试以这种方式:

app.get(['/','test'], function(req,res){
    res.sendFile(__dirname + '/public/'+ 'index.html');
});

最新更新