2017-06-12 5 views
0

私はこれを何時間もしていて、接続できないようです。SailsJSがテンプレートを表示するためにデータを渡さない

私は単にコントローラからビューテンプレートにいくつかのデータを渡そうとしています。ビューテンプレートが宣言されていないルートを実行すると、ブラウザはJSONフォームのデータをブラウザに返します(MYSQL接続が良好であることがわかります)。

テンプレートに渡すMYSLQデータ(またはコントローラの任意のデータ)に接続しようとするたびに、データが見つからないというエラーが表示されます私がJSONデータを返すときに見ることができるからです)。私はこれがSailsJSがEJSテンプレートエンジンに接続しようとしているか、Model、Controller、そしてViewをバックエンドで接続していないことが関係していると仮定していますか?

ここでは動作しない単純な例ですが、結局はMYSQLのデータリストに接続しようとしています。

Routes.js宣言:私は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" 
} 
から入手

'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> 

エラー

答えて

0

あなたのルートに問題があります。 view: 'schools/index'なぜ

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

に変更し

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

からそれとも削除しますか?あなたが実行するか(その静的ページ場合)レンダリングに表示れたいずれかのコントローラのアクションを指定する必要がルートで

res.viewは(views/と比較して)表示する経路として、その場合は、オプションの最初の引数を取り送信されない場合は、デフォルトで<contollerName>/<actionName>が表示されます。

+1

ありがとうございました!それは問題を解決しませんでしたが、データ、ビュー、およびルートがどのように接続されていたかによって、ソートの正しい道がわかりました。感謝します! –

0

ドキュメントを掘り下げながら、他のGithubの例を見て、私は最終的にそれをソートしました。 Sujanは私を正しい道に導いたが、それは問題を解決しなかった。それはデータを返しますが、ビューと結合されませんでした。ここで私が更新したものがあり、これでデータのリスト全体が取り出されます。データで明示的にビューに戻る必要がありました。それがセイルの中にあるはずなのかどうかはわかりませんが、それがうまくいったのです。それはルートがこれを処理する必要があるようですが、そうではありません。

コントローラファイル:

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'}, 

はまた、私はfindメソッドの制限を削除するにはconfigにblueprints.jsファイルを更新する必要がありました。

defaultLimit: Number.MAX_VALUE 

また、テンプレートエンジンをpugに更新しました。ここでは、このstackoverflowの質問と解答への回答を見てみると

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 

をindex.pug、ビューファイルでは、コントローラ内の明示的なビューの宣言を削除するために私を助けました。 Custom view/action/controller not working in Sails JS

関連する問題