报错如下:
ReferenceError: /trunk\web\home\views\user\index.ejs:17
15| <body>
16| <style type="text/css">body{background: #fafafa;}</style>
>> 17| <%-partial("../layout/top_nav.ejs",{data:{hasLogin:hasLogin,memberInfo:memberInfo}})%>
18| <%-partial("../layout/user_header.ejs",{data:{}})%>
19| <div class="wrap1200">
20| <div class="ce_mainbox mt30 clx">
/trunk\web\home\views\index.ejs:16
14|
15| <div class="topbanner">
>> 16| <div class="im"><img src="<%=indexBannerImage%>"/></div>
17| </div>
18| <%-partial("layout/top_nav.ejs",{data:{hasLogin:hasLogin,memberInfo:memberInfo}})%>
19| <%-partial("layout/header.ejs",{data:{MenuData:topMenuList,CurrentMenu:"index"}})%>
indexBannerImage is not defined
at eval (eval at <anonymous> (/trunk\web\home\node_modules\ejs\lib\ejs.js:464:12), <anonymous>:33:23)
at returnedFn (/trunk\web\home\node_modules\ejs\lib\ejs.js:493:17)
at exports.render (/trunk\web\home\node_modules\ejs\lib\ejs.js:315:37)
at render (/trunk\web\home\node_modules\express-partials\index.js:325:25)
at ServerResponse.partial (/trunk\web\home\node_modules\express-partials\index.js:365:12)
at eval (eval at <anonymous> (/trunk\web\home\node_modules\ejs\lib\ejs.js:464:12), <anonymous>:37:16)
at returnedFn (/trunk\web\home\node_modules\ejs\lib\ejs.js:493:17)
at View.exports.renderFile [as engine] (/trunk\web\home\node_modules\ejs\lib\ejs.js:350:31)
at View.render (/trunk\web\home\node_modules\express\lib\view.js:126:8)
at tryRender (/trunk\web\home\node_modules\express\lib\application.js:639:10)
其中是两个页面:
app.use('/', routes);
app.use('/user', users);
app.use("/test",router_test);
其中首页定义路由规则:
router.get('/', function(req, res, next) {
会员中心相关页面:
router.get('/', function(req, res, next) {
UserCenterService.getCommonPageData(req,function(commonData){
//res.send(JSON.stringify(commonData));
res.render('user/index.ejs', commonData);
});
});
最后发现先匹配了/user这个路由,然后再渲染了/这个路由,因为首页的一些数据没有所有导致了错误。
根源调查
首先调查是不是express的路由问题:
新建一些文件用于测试:
两个路由文件分别如下:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
console.log("index");
res.send('hello,this is index test -- index');
});
module.exports = router;
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
console.log("user");
res.send('hello,this is user test -- index');
});
module.exports = router;
在app.js里面注册路由:
app.use("/",router_index_test);
app.use("/user",router_user_test);
每次都重启一下nodejs的服务器,分别访问两个地址,查看相关数据。
而user路径如下:
阶段结论
可以认为路由相关匹配正常,同一个路由规则,action不会执行两次,那么,问题在哪?
添加ejs模板然后再测试
分别添加两个ejs模板:
里面的内容如下:
<h1><%=indexData.title%></h1>
<h2><%=indexData.message%></h2>
<h1><%=userData.title%></h1>
<h2><%=userData.message%></h2>
分别给action添加渲染的代码,渲染一下:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
console.log("index");
//res.send('hello,this is index test -- index');
res.render('test/index_test.ejs', {indexData:{title:"i am index",message:"this is index message"}});
});
module.exports = router;
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
console.log("user");
//res.send('hello,this is user test -- index');
res.render('test/user_test.ejs', {userData:{title:"i am user",message:"this is user message"}});
});
module.exports = router;
好了,测试一下:
阶段结论
无问题。
第三次测试,结合异步进行测试
最后发现
stackflow的说法
I have a page ./views/account/index.ejs that has a partial included from ./views/account/edit.ejs -- but I get an error that "path must be a string" when I call it from ./account/index.ejs
<%- partial('edit.ejs') %>
I'm using express 3.x and express-partials
If I include a partial that is at the base ./views/edit.ejs it works. How do I include a partial in a subdirectory? I tried <%- partial('account/edit') %> but it does not work.
1
down vote
I’ve got the same issue. I’ve fixed it inside the express-partials module and made a pull request - https://github.com/publicclass/express-partials/pull/19.
So just install the latest module version and you are done.
shareimprove this answer
answered Oct 4 ‘12 at 8:50
ecdeveloper
1,0621212