Sails显示E_VIEW_FAILED错误原因

错误信息

{
    "message": "Could not render view \"user\\list\".  Tried locating view file @ \"/Users/maxbin/java/git/TDH-CMDS/views/user\\list\". Layout configured as \"layout\", so tried using layout @ \"/Users/maxbin/java/git/TDH-CMDS/views/layout\")",
    "code": "E_VIEW_FAILED",
    "status": 500,
    "view": {
        "name": "user\\list",
        "root": "/Users/maxbin/java/git/TDH-CMDS/views",
        "defaultEngine": "ejs",
        "ext": ".ejs"
    }
}

原因分析

  • 由于项目刚开始在在公司windows系统电脑上写的,页面路径写死了分隔符"\"
// 跳转页面的一个类
module.exports = {

  index: function (req, res) {
    var param_model = req.param('model');
    var param_name = req.param('name', '404');

    if(!param_name){
      param_name = '404';
    }
    if(param_model){
      return res.view(param_model + "\\" + param_name);
    }else{
      return res.view(param_name);
    }
  }
};
  • 导致在windows上运行没有问题,回到家中想继续写代码的时候,在mac上运行发现无法跳转页面了,由于报错信息不明显,导致调试了一会才找到这个原因;
  • 其实如果仔细看报错信息,细心点还是可以发现路径不一致的问题
/git/TDH-CMDS/views/user\\list\

修改方法

  • 用系统分隔符替换代码中写的固定windows分隔符
// 引入nodeJS的path模块
var path = require("path");

module.exports = {

  index: function (req, res) {
    var param_model = req.param('model');
    var param_name = req.param('name', '404');

    if(!param_name){
      param_name = '404';
    }
    if(param_model){
      return res.view(param_model + path.sep + param_name);
    }else{
      return res.view(param_name);
    }
  }
};
  • 总结一下:下代码还是不要偷懒了,随手写的hardcode很可能就是一个坑
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,312评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,041评论 25 709
  • 这常识…我就不知道昂 单纯考英语…不好吗 简单点儿 出题的方式简单点儿
    翮笙阅读 760评论 0 0
  • 一人漫步 天堂 梦里 停 单膝跪下 给她系鞋带
    长马阅读 1,592评论 0 6
  • 左壮右悦阅读 1,046评论 0 0