我试图在/ profile,/ account或/ account / profile上创建一个页面(在撇号多站点项目中,因此每个站点都将存在一个唯一的页面)。
我在/sites/lib/modules/account-profile/index.js
下创建了以下内容,并在How Apostrophe handles requests页面上进行了修改:
module.exports = {
afterConstruct: function(self) {
self.addDispatchRoutes();
},
construct: function(self, options) {
self.addDispatchRoutes = function() {
self.dispatch("/account/:profile", self.showPage);
};
self.showPage = function(req, callback) {
return (
req.params.profile,
(err, doc) => {
// handle err, if no err...
if (!doc) {
// Let Apostrophe render the 404 page
req.notFound = true;
}
req.template = self.renderer("profile", { doc: doc });
return callback(null);
}
);
};
}
};
包括以下内容:
"account-profile": {
extend: "apostrophe-custom-pages"
}
在app.js中
我遇到的问题是,当我点击例如/ account / profile时,showPage函数永远不会运行。
我了解与/ account / profile位匹配的:profile位有点可疑,但我也想不出在执行以下操作时如何呈现模板:
self.apos.app.get("/account/profile", async function(req, res, callback) {
req.template = self.renderer("profile", { doc: "hi" });
// now what?
});
我想我缺少了一些简单的东西,但是我已经对文档进行了彻底的扫描,找不到丢失的部分。
答案 0 :(得分:1)
您在最底层的示例中非常接近!为了在静态路由上创建页面,我通常倾向于使用您在问题中显示的相同代码。为了从apos.app.get内部返回页面,您需要执行以下操作:
self.apos.app.get('/account/profile', function(req, res){
// Place any data you need to access in your template here:
req.data = {};
// self.sendPage is what will actually return the page and render the template 'profile.html' in your views folder.
// You can change 'profile' to the name of your template minus '.html' - e.g. 'page.html' would just be 'page'
return self.sendPage(req, 'profile', {});
});
您丢失的那一块似乎是sendPage。该方法实际上将使用该方法第二个参数中指定的模板来呈现页面。
如果将其放入构造方法中,则您的站点上将具有一条新路由,您可以通过转到/ account / profile进行访问。它将呈现位于模块的views文件夹中的模板。
我最初在此页面上找到此信息:
https://apostrophecms.org/docs/technical-overviews/how-apostrophe-handles-requests.html
“从路线呈现完整的HTML页面”部分。