私の努力は、ExpressからKoaまで私のアプリを再エンジニアリングすることです。それで、routes.jsとcontrollers.jsは以前に動作します。私はKoaでテンプレートをレンダリングするための小さなメカニズムを作成しようとします。目標は他のモジュールに作業コードを適用して、異なるテンプレートエンジンを自動的にレンダリング変数を通して呼び出し、module.view_engineをmodule.routesごとに適用することです。手伝ってくれますか?Koaでテンプレートをレンダリングするには
+---modules
| +---core
| | +---client
| | | \---views
| | | equipment.pug
| | | error.pug
| | | home.pug
| | |
| | \---server
| | +---configs
| | | core.config.json
| | | core.koa.configs.js
| | |
| | +---controllers
| | | core.server.controllers.js
| | |
| | +---models
| | | assembly.server.model.js
| | | ecms_equipment.server.model.js
| | | ecms_location.server.model.js
| | | ecms_main.server.model.js
| | | index.js
| | |
| | \---routes
| | core.server.routes.js
| |
| +---assemblys
| | +---client
| | | \---views
| | | assembly_view.pug
| | |
| | \---server
| | +---controllers
| | | assemblys.server.controllers.js
| | |
| | \---routes
| | assemblys.server.routes.js
これは私のディレクトリ構造です。 Lodashのカップルの各ループで、私はmodule
まだ_.each
ループ内で、私が呼ぶと、同じファイルで
modules[module] = {
view_path: view_path,
routes: routes,
view_engine: view_engine
};
core.koa.configs.js
にモジュールあたりview_path、ルート、view_engineを達成することができています 以下を含むassembly.server.routes.jsにアプリ取り// regex to narrow the scope of code experimenting
if (module.re('assemblys')) {
// === var render here? ===
require(routes)(app);
}
:assembly.server.controllers.jsで、その後
var controller = require('../controllers/projects.server.controllers');
module.exports = function(app){
app.get('/task', controller.assembly)
};
を、私は、アセンブリの機能を提供しようとするが、それは動作しません - 404:私はfunction *()
にrender
を渡すとき
// load Sequelize models
var models = require(process.cwd() + '/modules/core/server/models');
exports.assembly = function *() {
var that = this.body, views = require('co-views');
var render = views('../../client/views/' , {
map: {pug: 'jade'}
});
var Assembly = models.Assembly;
Assembly.findAll().then(function (assemblys) {
that = yield render('assembly_view' , {assemblys: assemblys});
});
};
は以前、私は、すぐそこview_path使用できるようにするcore.configs内var render
を入れたが、エラーとアプリクラッシュが発生しました。 core.configsにあったレンダリングするとき、私はこれを輸出routes.jsファイル持っていた:
module.exports = function(app, render){
app.get('/task', controller.assembly(render));
};
をいくつか興亜の例は、このapp.use(route.get('/assembly', function *() { });
でroute
を使用して言うと、私はいくつかの他の例は、単にこの
app.get('/task', controller.assembly(render)); // cnpmjs.org, koan stack...
を使用しました
私は後者を好む。しかし、yield render
で問題が発生し、アプリケーションを読み込んでfunction *(app,render)
ジェネレータにパラメータをレンダリングする方法を試しましたが、うまくいきませんでした。スタックトレースにエラーがあります。
考え結果はcore.koa.configs.jsを持っていることである。
if (module.re('assemblys')) {
var render = views(view_path , {
map: view_engine
});
require(routes)(app, render);
}
次いで輸出ルート
module.exports = function(app, render){
app.get('/task', controller.assembly(render))
};
コントローラはassemblysをレンダリングすることができる:
exports.assembly = function *(render) {
var that = this.body, views = require('co-views');
var Assembly = models.Assembly;
Assembly.findAll().then(function (assemblys) {
that = yield render('assembly_view' , {assemblys: assemblys});
});
};
更新:stack-tracesを参照してください。 koa branch_commit。 -compiled.js.mapファイルがES6-Babelによって生成されました
あなたが受けている404程度のコンソールからすべてのログ情報を持っていますか?期待通りに動作していれば驚かないでしょうが、404はPugファイルから来ています。 – doublesidedstickytape
ありがとうございます。 http://imgur.com/a/A79vGスタックトレースによる更新。 私は共同ビューサービスを使用しています。私のpackages.jsonが必要ですか? –