注意:这不是一个重复的问题,我已经尝试过类似问题的其他答案。
我试图渲染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
答案 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"))
}
祝你好运