Express.js"路径必须是绝对路径或指定root到res.sendFile"错误

时间:2015-12-11 05:59:46

标签: node.js express

注意:这不是一个重复的问题,我已经尝试过类似问题的其他答案。

我试图渲染html文件(Angular),但我遇到了问题。 这很有效。

app.get('/randomlink', function(req, res) {
    res.sendFile( __dirname + "/views/" + "test2.html" );
});

但我不想一遍又一遍地复制和粘贴dirname,所以我尝试了这个,以免与网址重复:

app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'views')));

app.get('/randomlink', function(req, res) {
     res.sendFile('test2.html'); // test2.html exists in the views folder
 });

这是错误。

我的快递版本是4.13

  

path必须是绝对路径或指定root到res.sendFile

4 个答案:

答案 0 :(得分:12)

如果你查看sendFile的快速代码,那么它会检查这个条件:

<div class="container-fluid" style="margin:0px auto;height:auto;border:1px solid yellow;">


@foreach($reviews as $review)

<div class="row">
    <div class="col-sm-12">
    <div class="col-sm-4">
    <div>name is:- {{$review->name}}</div>
    <div>course is:-{{$review->course}}</div>
    <div>designation is:-{{$review->designation}}</div>
    <div>company is:-{{$review->company}}</div>
    <div>comments:-{{$review->comments}} </div>
    <div>status:{{$review->status}} </div>
    <div>priority:{{$review->priority}}</div>
    <div>review date:-{{$review->review_date}}</div>

    <?php
        $image =stripslashes($review->image);
    ?>
    <div>images:<img src='{{asset("$image")}}'></div>

    </div>
</div>


</div>


@endforeach


</div>

所以你必须通过提供if (!opts.root && !isAbsolute(path)) { throw new TypeError('path must be absolute or specify root to res.sendFile'); } 密钥来传递绝对路径或相对路径。

root

如果您想使用相对路径,那么您可以使用res.sendFile('test2.html', { root: '/home/xyz/code/'}); 使其成为绝对路径。

path.resolve

答案 1 :(得分:5)

您不能违反res.sendFile()

的官方文档
  

除非在options对象中设置了root选项,否则path必须是文件的绝对路径。

但是我知道你不想每次都像__dirname那样复制smth,所以为了你的目的,我认为你可以定义自己的中间件:

function sendViewMiddleware(req, res, next) {
    res.sendView = function(view) {
        return res.sendFile(__dirname + "/views/" + view);
    }
    next();
}

之后,您可以轻松地使用此类中间件

app.use(sendViewMiddleware);

app.get('/randomlink', function(req, res) {
    res.sendView('test2.html');
});

答案 2 :(得分:0)

最简单的方法是指定根:

res.sendFile('index.html', { root: __dirname });

答案 3 :(得分:0)

我遇到了同样的问题,然后如下解决了我的问题。

const path = require("path")
app.get('/', (req, res)=>{
    res.sendFile(path.resolve("index.html"))
}

祝你好运