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很可能就是一个坑

你可能感兴趣的:(Sails显示E_VIEW_FAILED错误原因)