创建呈现模板的静态路由

时间:2019-01-15 15:09:34

标签: apostrophe-cms

我试图在/ 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?
});

我想我缺少了一些简单的东西,但是我已经对文档进行了彻底的扫描,找不到丢失的部分。

1 个答案:

答案 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页面”部分。