使用ejs在机车中的路由

时间:2014-04-16 08:43:23

标签: node.js routing locomotivecms locomotivejs

我正在为节点atm尝试节点和一些框架,特别是机车。但是,我似乎停留在使用机车的路线上。几个问题我找不到答案,所以这里有:

  1. 为什么机车开箱即用安装使用index.html.ejs作为 文件名?为什么不只是index.ejs?有什么好处?

  2. 我正在尝试向视图添加路由:searchName.html.ejs i 添加在views文件夹中。为了实现这一点,我做了一个toolController 像这样:

    var locomotive = require('locomotive').Controller,
    toolController = new Controller();
    
    toolController.searchName = function() {
        this.render();
    }
    
    module.exports = toolController;
    

    我还在routes.js中添加了一条路线,如:

    this.match('searchName', 'tool#searchName');
    

    然而,这不起作用(但它是文档说应该工作的)。结果是404错误。那么我该如何使这条路线发挥作用呢?

  3. 假设我想要建立一条路线,例如anExample.html?我怎么去 关于那个?我注意到在开箱即用的应用程序中 机车,你不能输入localhost:3000 / index.html。甚至都没有 localhost:3000 / index这对我来说似乎非常不切实际 有很多用户会添加他们想要访问的特定页面。 那我该怎么做呢?

  4. PS:我在stackoverflow上经历了有关这方面的所有问题并在网上搜索过,但我仍然无法解决这个问题。enter code here

1 个答案:

答案 0 :(得分:1)

  1. 这样做的好处是,此命名方案允许您为单个路径指定多种不同的格式。因此,您可以拥有search_name.html.ejssearch_name.xml.ejs,然后根据客户的期望回复任意一个视图。

  2. 您发布的示例代码存在一些问题。你应该看到一个比404更具描述性的错误,所以我不确定那里发生了什么,但这里是你的代码在我的环境中工作的修复。

    在控制器中:

    //tool_controller.js
    var locomotive = require('locomotive');
    var toolController = new locomotive.Controller();
    
    toolController.searchName = function() {
      this.render();
    };
    
    module.exports = toolController;
    

    在routes.js中:

    //routes.js
    module.exports = function routes()
    {
      this.match('searchName', 'tool#searchName');
    }
    

    然后,您需要将视图更改为:views/tool/search_name.html.ejs。从文档中可以清楚地看出,但是机车会自动降低并强调像cameName这样的骆驼行动。

    现在启动应用并浏览到http://localhost:3000/searchName

  3. 如果您只想提供静态html文件,最简单的方法就是将其放在public文件夹中。此文件夹专门用于提供静态内容,如客户端js,css等。它也适用于提供静态HTML。