Мое усилие состоит в том, чтобы перестроить мое приложение из Express в Koa, поэтому routes.js и controllers.js работают ранее. Я пытаюсь создать небольшой механизм для создания шаблона в Koa. Цель состоит в том, чтобы применить рабочий код для других модулей, загружая различные двигатели шаблонов автоматически через переменную визуализации, вызывающую module.view_engine per 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 каждый петли, я могу достичь view_path, маршруты, view_engine для каждого модуля в core.koa.configs.js
modules[module] = {
view_path: view_path,
routes: routes,
view_engine: view_engine
};
В том же файле, с module
еще внутри цикла _.each
, звоню
// regex to narrow the scope of code experimenting
if (module.re('assemblys')) {
// === var render here? ===
require(routes)(app);
}
Это занимает приложение к assembly.server.routes.js, содержащих следующие:
var controller = require('../controllers/projects.server.controllers');
module.exports = function(app){
app.get('/task', controller.assembly)
};
Затем в assembly.server.controllers.js, Я стараюсь, чтобы обеспечить функцию сборки, но он не работает - 404:
// 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});
});
};
Раньше я положил var render
внутри core.configs, чтобы иметь возможность использовать view_path прямо там, но потом, когда я прохожу render
в function *()
, У меня ошибка и ошибка приложения! Когда рендер был в core.configs, я имел routes.js файл экспортирующей это:
module.exports = function(app, render){
app.get('/task', controller.assembly(render));
};
Некоторые примеры Коа говорит, используя route
в этом app.use(route.get('/assembly', function *() { });
, и я видел некоторые другие примеры просто использовать этот
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 Обновление со стековыми следами. Я использую сервис co-views, вам нужны мои пакеты.json? –