Meine Bemühung ist, meine APP von Express zu Koa umzubauen, also arbeiten routes.js und controllers.js vorher. Ich versuche, einen kleinen Mechanismus zu erstellen, um Vorlage in Koa zu rendern. Das Ziel ist es, den Arbeitscode für andere Module laden verschiedene Vorlage-Engines automatisch durch Render-Variable Aufruf von module.view_engine pro module.routes. Kannst du helfen?Wie man Vorlage mit Koa rendert
+---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
Das ist meine Verzeichnisstruktur. Mit ein paar Lodash jede Schleife, ich bin in der Lage view_path, Routen, view_engine pro Modul in core.koa.configs.js
modules[module] = {
view_path: view_path,
routes: routes,
view_engine: view_engine
};
In der gleichen Datei zu erreichen, mit module
noch innerhalb der _.each
Schleife, ich nenne
// regex to narrow the scope of code experimenting
if (module.re('assemblys')) {
// === var render here? ===
require(routes)(app);
}
, dass die App auf die assembly.server.routes.js mit folgendem Inhalt nimmt:
var controller = require('../controllers/projects.server.controllers');
module.exports = function(app){
app.get('/task', controller.assembly)
};
Dann in der assembly.server.controllers.js, Ich versuche, die Montage-Funktion zur Verfügung zu stellen, aber es funktioniert nicht - 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});
});
};
Zuvor Ich habe var render
in dem core.configs der Lage sein, view_path genau dort zu verwenden, aber wenn ich dann passieren render
in function *()
, Ich habe Fehler und App-Absturz! Wenn in core.configs war render, hatte ich die routes.js Datei exportieren diese:
module.exports = function(app, render){
app.get('/task', controller.assembly(render));
};
Einige Beispiele Koa sagt mit route
in diesem app.use(route.get('/assembly', function *() { });
und ich sah nur einige weitere Beispiele dieses
app.get('/task', controller.assembly(render)); // cnpmjs.org, koan stack...
verwenden
Ich bevorzuge Letzteres. Aber Probleme mit yield render
und wie man app, rendern Parameter in den function *(app,render)
Generator, habe ich versucht, aber es funktioniert auch nicht. Fehler beim Stack-Trace.
Die Idee Ergebnis ist in core.koa.configs.js haben:
if (module.re('assemblys')) {
var render = views(view_path , {
map: view_engine
});
require(routes)(app, render);
}
leitet dann den Export
module.exports = function(app, render){
app.get('/task', controller.assembly(render))
};
und der Controller ist in der Lage, die assemblys zu machen:
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});
});
};
Update: Siehe stack-traces, siehe koa branch_commit. -compiled.js.map Dateien wurden von ES6-Babel generiert
Haben Sie eine Logging-Informationen von der Konsole über die 404 die Sie erhalten? Würde mich nicht wundern, wenn es wie erwartet funktioniert, aber der 404 kommt aus Ihrer Pug-Datei. – doublesidedstickytape
Vielen Dank für Ihre Eingabe. http://imgur.com/a/A79vG Update mit Stack-Traces. Ich verwende Co-Views-Service, benötigen Sie meine packages.json? –