在nodeJS和Express框架中找不到文件时出错
Error handeling when file is not found in nodeJS and Express framework
我想使用node/express显示多个html/jade文件。
我正在尝试创建一个处理不存在文件的基本规则
如果我写这段代码,我不会处理错误响应,但它会起作用:
app.get('/art/:project', function(req, res){
var project = req.param('project');
res.render('art/' + project);
});
如果我写这段代码,它会正确处理错误,但由于某种原因,当文件确实存在时,它不会显示页面。
app.get('/art/:project', function(req, res){
var project = req.param('project');
res.render('art/' + project, function(err, html) {
if (err) {
res.redirect('/');
}
});
});
我错过了什么?
我发现这是可行的,但它似乎非常低效:
res.render('art/' + project, function(err, html) {
console.log(err, html);
if (err) {
res.redirect('/');
} else {
res.render('art/' + project);
}
});
在尝试渲染文件之前检查文件是否存在不是更好吗?
var fs = require('fs');
app.get('/art/:project', function(req, res){
var project = req.param('project');
fs.exists('art/' + project + '.jade', function(exists) {
if (exists) {
res.render('art/' + project);
} else {
res.redirect('/');
}
});
});
仔细检查它的存在是否正常,但文档建议:
fs.exists()是一个时代错误,只因历史原因而存在。在您自己的代码中使用它几乎不应该有任何理由。
特别是,在打开文件之前检查文件是否存在让你容易受到种族条件影响的反模式:另一个进程可能会在调用fs.exists()和fs.open()。只需打开文件并在不打开时处理错误那里
所以最好先捕获异常,然后再处理它:
try {
res.render('art/' + project);
}
catch(e) {
if (e.code === 'ENOENT')
res.redirect('/');
else
throw e;
}
相关文章:
- Angular 2:在本地.json文件上找不到文件
- 放大弹出生成“;找不到文件”;YouTube视频的错误
- Web 地址虚拟目录会断开外部 JavaScript 链接,因此找不到文件
- 找不到Intel XDK cordova文件api 1.3.3文件
- 按钮未运行为按钮,找不到如何使运行JS文件
- javaScript警报和提示框将我重定向到另一个页面,上面写着“;找不到文件”;
- 轨道:找不到文件“提前输入.js”.直到我删除“数据涡轮链接”
- 呵呵!与 npm 找不到文件有关
- Ruby on Rails:“找不到文件'jquery.ui.datepicker'”
- 使用$redirectRoute时不断出现“找不到文件”
- 在nodeJS和Express框架中找不到文件时出错
- Node.js具有express和react,fs.readdir可以'找不到文件
- 轨道:链轮可以'找不到文件
- 找不到文件“jquery-ui”
- Windows脚本主机”;找不到文件“;仅在windows XP中出现异常
- Wordpress找不到文件
- SAPUI5文件上传程序:找不到文件并将其附加到FormData()
- 重写 htacces 找不到文件
- 捆绑 css 文件 - 找不到文件
- Gulp-sass和gulp-watch,保存scss时找不到文件