Sails.js(0.9.8)404页面使用默认布局

Sails.js(0.9.8)404页面使用默认布局,sails.js,Sails.js,与类似,但该答案仅适用于0.10.x,目前该选项不适用。我会要求澄清,但我还没有足够的声誉 我的目标是为我的应用程序提供默认布局,使用一些404语言和一个搜索栏,但每次我尝试修改404.ejs页面并请求myapp.com/routethatdoesntexist时,我得到的响应是“无法获取/routethatdoesntexist” 我觉得这是一种类似于: var view = 'new404'; res.locals.layout = 'layout'; res.render(view, re

与类似,但该答案仅适用于0.10.x,目前该选项不适用。我会要求澄清,但我还没有足够的声誉

我的目标是为我的应用程序提供默认布局,使用一些404语言和一个搜索栏,但每次我尝试修改404.ejs页面并请求myapp.com/routethatdoesntexist时,我得到的响应是“无法获取/routethatdoesntexist”

我觉得这是一种类似于:

var view = 'new404';
res.locals.layout = 'layout';
res.render(view, result, function (err) {
  if (err) {
    return express404Handler();
  }
  res.render(view);
});
但是这个结果与使用提供的404.ejs文件没有什么不同。我错过了什么

[编辑]

尝试下面的建议,我将404.js文件更改为:

var view = '404test';
res.view('404test', {layout: '404layout_test'});
和404.ejs到:

大麻烦,小中国

404layout_test.ejs是我们当前运行的布局文件的1对1副本。无论我选择哪种布局,错误消息都是相同的:

{
  "path": {
    "message": "'/Users/brandt/midas/views/404layout_test.ejs'",
    "stack": "Error: '/Users/brandt/midas/views/404layout_test.ejs'\n    at Object.serverErrorOccurred [as 500] (/Users/brandt/midas/config/500.js:28:28)\n    at ServerResponse.respond500 (/Users/brandt/midas/node_modules/sails/lib/hooks/request/index.js:134:21)\n    at /Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:301:17\n    at Function.app.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/application.js:508:5)\n    at ServerResponse.res.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/response.js:798:7)\n    at ServerResponse._addResViewMethod.res.view (/Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:297:15)\n    at Object.pageNotFound [as 404] (/Users/brandt/midas/config/404.js:25:7)\n    at Object.handle (/Users/brandt/midas/node_modules/sails/lib/express/index.js:198:21)\n    at next (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:190:15)\n    at Object.favicon [as handle] (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/favicon.js:77:7)"
  },
  "INVALID_EXPRESSION_ERR": {
    "message": "51",
    "stack": "Error: 51\n    at Object.serverErrorOccurred [as 500] (/Users/brandt/midas/config/500.js:28:28)\n    at ServerResponse.respond500 (/Users/brandt/midas/node_modules/sails/lib/hooks/request/index.js:134:21)\n    at /Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:301:17\n    at Function.app.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/application.js:508:5)\n    at ServerResponse.res.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/response.js:798:7)\n    at ServerResponse._addResViewMethod.res.view (/Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:297:15)\n    at Object.pageNotFound [as 404] (/Users/brandt/midas/config/404.js:25:7)\n    at Object.handle (/Users/brandt/midas/node_modules/sails/lib/express/index.js:198:21)\n    at next (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:190:15)\n    at Object.favicon [as handle] (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/favicon.js:77:7)"
  },
  "TYPE_ERR": {
    "message": "52",
    "stack": "Error: 52\n    at Object.serverErrorOccurred [as 500] (/Users/brandt/midas/config/500.js:28:28)\n    at ServerResponse.respond500 (/Users/brandt/midas/node_modules/sails/lib/hooks/request/index.js:134:21)\n    at /Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:301:17\n    at Function.app.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/application.js:508:5)\n    at ServerResponse.res.render (/Users/brandt/midas/node_modules/sails/node_modules/express/lib/response.js:798:7)\n    at ServerResponse._addResViewMethod.res.view (/Users/brandt/midas/node_modules/sails/lib/hooks/views/index.js:297:15)\n    at Object.pageNotFound [as 404] (/Users/brandt/midas/config/404.js:25:7)\n    at Object.handle (/Users/brandt/midas/node_modules/sails/lib/express/index.js:198:21)\n    at next (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:190:15)\n    at Object.favicon [as handle] (/Users/brandt/midas/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/favicon.js:77:7)"
  }
}
将res.view设置为: res.view('404test',{layout:false})

成功,但没有布局

[编辑#3]


我已经跟踪到默认布局顶部的存在。

这应该标记为的副本,但万一它永远停留在投票队列中:

要在Sails v0.9.x中为自定义404页面使用布局,请编辑config/404.js文件,使用
res.view
而不是
res.render
,并在第二个参数中提供布局名称(如果要在视图/layout.ejs中使用默认布局,则不使用):


我已经更新了我的答案,以涵盖v9——它实际上是相同的概念(
res.render
vs
res.view
),只是编辑了不同的文件。可能的重复我将尝试找出如何升级的方法,如果可行的话。我真的希望我可以在那里而不是在这里要求澄清,但显然我还没有理由发表评论。我不确定问题是什么,但这对我来说是有效的。您在布局文件中是否有一些未在
404.js中填充的局部变量?这会导致一些EJS错误,这可能就是您看到的…Scott,非常感谢您的建议和见解。在你昨天的评论之后,我能够让它表现出我所期待的样子。从布局文件中删除行使我走上正轨。此解决方案已经提出,但没有解决问题。我只是粘贴了上面评论中讨论的所有内容的结果。从布局文件中删除
的问题与“如何在sailsv0.9.x中使用404页面布局”的问题无关;渲染视图时,如果EJS文件中存在未指定的局部变量,则始终会导致错误。
res.view("my404page", {layout: "myFancyLayout"})