从 keystone.js 发送部分以与 ui.view 一起使用
Sending partials from keystone.js for use with ui.view
我一直在努力解决这个问题,但终究无法弄清楚我错过了什么。
所以我想设置keystone,但是想在前端使用angular,又想避免每次都重新加载页面。
angular 运行 非常好而且很快。但是现在我正在尝试在后端为部分设置路由,虽然我可以设法让它们设置为回答,但我不能让它们只发送部分,无论我做什么它都会将整个页面发送回去大部头书。与 html、body、头。
到目前为止我已经设法弄清楚我需要一条路线,所以导入我的 uiview 目录并添加以下路线:
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);
// Import Route Controllers
var routes = {
views: importRoutes('./views'),
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
app.get('/', routes.views.index);
app.get('/uiviews/index',routes.uiviews.index);
app.get('/blog/:category?', routes.views.blog);
app.get('/blog/post/:post', routes.views.post);
app.get('/gallery', routes.views.gallery);
app.all('/contact', routes.views.contact);
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
我认为发生的事情是预编译器 (keystone.pre('routes', middleware.initLocals);) 抓住它并按照它认为的方式包装它假设,但我不确定。
我什至试图用我的 uiroute 在 ./routes 中创建一个 uiviews.js,但这给了我 404 错误
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Import Route Controllers
var routes = {
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
console.log('uiroutes added');
app.get('/uiview/index',routes.uiviews.index);
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
有什么想法吗?
这更像是一个 Express 问题,而不是 keystone.Js。
你还没有说你想要部分路由器。并且都没有共享该处理程序的呈现代码。
任何方式确保您使用的模板不包含任何其他模板。特别是 default.jade
我终于弄清楚我错过了什么。
从技术上讲,控制发送内容的不是 keystone.js,而是车把。这对除我之外的每个人来说都是显而易见的。
但是,诀窍是告诉车把不要包含布局,这是使用 {layout: false} 完成的。所以我的 uiview 路线看起来像这样(最后一行很神奇):
var keystone = require('keystone');
exports = module.exports = function(req, res) {
console.log("request for index received");
var view = new keystone.View(req, res),
locals = res.locals;
console.log(locals);
// Render the view
console.log(view)
view.render('uiviews/index', {layout: false});
};
index.js 路由器看起来像这样:
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);
// Import Route Controllers
var routes = {
views: importRoutes('./views'),
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
console.log('index added');
app.get('/', routes.views.index);
app.get('/partners', routes.views.partners);
app.get('/blog/:category?', routes.views.blog);
app.get('/blog/post/:post', routes.views.post);
app.get('/gallery', routes.views.gallery);
app.get('/philosophy', routes.views.philosophy)
app.get('/socialmedia', routes.views.socialmedia)
app.all('/contact', routes.views.contact);
app.get('/uiviews/index', routes.uiviews.index)
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
现在您可以调用 [host]/uiviews/index 并且只收到部分路由。
我一直在努力解决这个问题,但终究无法弄清楚我错过了什么。
所以我想设置keystone,但是想在前端使用angular,又想避免每次都重新加载页面。
angular 运行 非常好而且很快。但是现在我正在尝试在后端为部分设置路由,虽然我可以设法让它们设置为回答,但我不能让它们只发送部分,无论我做什么它都会将整个页面发送回去大部头书。与 html、body、头。
到目前为止我已经设法弄清楚我需要一条路线,所以导入我的 uiview 目录并添加以下路线:
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);
// Import Route Controllers
var routes = {
views: importRoutes('./views'),
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
app.get('/', routes.views.index);
app.get('/uiviews/index',routes.uiviews.index);
app.get('/blog/:category?', routes.views.blog);
app.get('/blog/post/:post', routes.views.post);
app.get('/gallery', routes.views.gallery);
app.all('/contact', routes.views.contact);
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
我认为发生的事情是预编译器 (keystone.pre('routes', middleware.initLocals);) 抓住它并按照它认为的方式包装它假设,但我不确定。
我什至试图用我的 uiroute 在 ./routes 中创建一个 uiviews.js,但这给了我 404 错误
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Import Route Controllers
var routes = {
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
console.log('uiroutes added');
app.get('/uiview/index',routes.uiviews.index);
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
有什么想法吗?
这更像是一个 Express 问题,而不是 keystone.Js。
你还没有说你想要部分路由器。并且都没有共享该处理程序的呈现代码。
任何方式确保您使用的模板不包含任何其他模板。特别是 default.jade
我终于弄清楚我错过了什么。
从技术上讲,控制发送内容的不是 keystone.js,而是车把。这对除我之外的每个人来说都是显而易见的。
但是,诀窍是告诉车把不要包含布局,这是使用 {layout: false} 完成的。所以我的 uiview 路线看起来像这样(最后一行很神奇):
var keystone = require('keystone');
exports = module.exports = function(req, res) {
console.log("request for index received");
var view = new keystone.View(req, res),
locals = res.locals;
console.log(locals);
// Render the view
console.log(view)
view.render('uiviews/index', {layout: false});
};
index.js 路由器看起来像这样:
var keystone = require('keystone');
var middleware = require('./middleware');
var importRoutes = keystone.importer(__dirname);
// Common Middleware
keystone.pre('routes', middleware.initLocals);
keystone.pre('render', middleware.flashMessages);
// Import Route Controllers
var routes = {
views: importRoutes('./views'),
uiviews: importRoutes('/uiviews'),
};
// Setup Route Bindings
exports = module.exports = function (app) {
// Views
console.log('index added');
app.get('/', routes.views.index);
app.get('/partners', routes.views.partners);
app.get('/blog/:category?', routes.views.blog);
app.get('/blog/post/:post', routes.views.post);
app.get('/gallery', routes.views.gallery);
app.get('/philosophy', routes.views.philosophy)
app.get('/socialmedia', routes.views.socialmedia)
app.all('/contact', routes.views.contact);
app.get('/uiviews/index', routes.uiviews.index)
// NOTE: To protect a route so that only admins can see it, use the requireUser middleware:
// app.get('/protected', middleware.requireUser, routes.views.protected);
};
现在您可以调用 [host]/uiviews/index 并且只收到部分路由。