2017-06-12 70 views
0

我一直在這個小時,似乎無法建立連接。SailsJS不通過數據查看模板

我只是試圖將一些數據從控制器傳遞到視圖模板。如果我在未聲明視圖模板的情況下運行路由,那麼瀏覽器會以JSON形式將數據返回給瀏覽器(所以我知道MYSQL連接是好的)。

無論何時我嘗試連接到MYSLQ數據(或控制器的任何數據以查看)傳遞給模板,我在Sails中發現錯誤,表示無法找到數據(我知道這不是是真的,因爲當我剛剛返回JSON數據時可以看到它)。我假設這與SailsJS嘗試連接到EJS模板引擎的方式有關,或者在模型,控制器和後端View之間沒有連接?

這裏只是一個簡單的例子,它不起作用,但最後我試圖連接到MYSQL數據列表。

Routes.js聲明:

'GET /schools': { view: 'schools/index', controller: "SchoolsController", action:"index"}, 

SchoolsController.js

module.exports = { 
index: function(req, res){ 
    //Just return this to the view 
    res.view({ 
     "name": "Iparra" 
    }) 
} 
}; 

index.ejs模板

<div id="theschools"> 
<h1>List of Schools</h1> 
    <%= name %> 
</div> 

錯誤,我從Sails.js

{ 
    "stack": "ReferenceError: /Users/mnelson/Documents/Mike Files 2/Personal/MyDesign Musings/sails/test-project/views/schools/index.ejs:7\n 5|  <h1>List of Schools</h1>\n 6| \n >> 7|  <%= name %>\n 8| \n 9| </div>\n 10| \n\nname is not defined\n at eval (eval at <anonymous> (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:237:14), <anonymous>:30:109)\n at eval (eval at <anonymous> (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:237:14), <anonymous>:30:137)\n at /usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:250:15\n at Object.exports.render (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:288:13)\n at Object.exports.renderFile (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/node_modules/ejs/lib/ejs.js:318:20)\n at SailsView.module.exports [as engine] (/usr/local/lib/node_modules/sails/node_modules/ejs-locals/index.js:85:7)\n at SailsView.View.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/view.js:76:8)\n at Function.app.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/application.js:561:10)\n at ServerResponse.res.render (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/response.js:845:7)\n at ServerResponse.res.view (/usr/local/lib/node_modules/sails/lib/hooks/views/res.view.js:284:16)\n at serveView (/usr/local/lib/node_modules/sails/lib/hooks/views/onRoute.js:61:20)\n at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:181:5)\n at callbacks (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:164:37)\n at param (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:138:11)\n at pass (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:145:5)\n at nextRoute (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:100:7)\n at callbacks (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:167:11)\n at module.exports (/usr/local/lib/node_modules/sails/lib/hooks/cors/clear-headers.js:14:3)\n at routeTargetFnWrapper (/usr/local/lib/node_modules/sails/lib/router/bind.js:181:5)\n at callbacks (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:164:37)\n at param (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:138:11)\n at pass (/usr/local/lib/node_modules/sails/node_modules/@sailshq/express/lib/router/index.js:145:5)", 
    "message": "/Users/mnelson/Documents/Mike Files 2/Personal/My Design Musings/sails/test-project/views/schools/index.ejs:7\n 5|  <h1>List of Schools</h1>\n 6| \n >> 7|  <%= name %>\n 8| \n 9| </div>\n 10| \n\nname is not defined", 
    "path": "/Users/mnelson/Documents/Mike Files 2/Personal/My Design Musings/sails/test-project/views/schools/index.ejs" 
} 
得到

回答

0

問題出在您的路線上。從

'GET /schools': { view: 'schools/index', controller: "SchoolsController", action:"index"}, 

刪除view: 'schools/index'或者只是將其更改爲

'GET /schools': { 'SchoolsController.index' }, 

爲什麼?

在路由必須指定其中任何一個控制器操作以執行或哪個視圖來呈現(如果它的一個靜態頁)

res.view有一個可選的第一個參數作爲視圖路徑(相對於views/),並且如果其沒有發送,它會默認呈現<contollerName>/<actionName>視圖。

+1

謝謝!它並沒有解決問題,但它讓我在正確的道路上分類數據,視圖和路線。欣賞它! –

0

在深入挖掘文檔並查看其他Github示例時,我最終將其整理。蘇揚讓我走上了正確的道路,但那並沒有解決問題。它會返回數據,但它不會與視圖結合。以下是我更新的內容,現在將整個數據列表拉入。我必須用數據明確地返回到視圖。我不確定這是否應該是Sails中的方式,但這是它的工作原理。似乎路線應該處理這個,但它不。

控制器的文件:

module.exports = { 
    index: function(req, res){ 
     Schools.find().exec(function afterFind(err, schools) { 
     if (err) return res.serverError(err); 
     console.log(schools); 
     return res.view('schools/index', { 
      theschools: schools 
     }); 
     }); 
    } 
}; 

路由文件:

'GET /schools': {controller: 'SchoolsController', action:'index'}, 

而且,我需要更新blueprints.js文件中的配置,以消除find方法的限制。

defaultLimit: Number.MAX_VALUE 

我也將模板引擎更新到帕格。這裏是視圖文件,index.pug

extends ../layout 

block body 
    #theschools 
    h1 
    | List of Schools 
    p 
    table.table 
    tr 
     th ID 
     th Name 
     th City 
     th Country 
    each school in theschools 
     tr 
     td= school.SID 
     td= school.schoolName 
     td= school.schoolCity 
     td= school.schoolCountry 

看着這個Stackoverflow問題和答案的答案幫助我刪除控制器中的顯式視圖聲明。 Custom view/action/controller not working in Sails JS