复合Js,Express Js路线

时间:2013-12-03 13:46:48

标签: node.js express compoundjs

我有NodeJs:0.10.22和compoundJs:1.1.7-11

我有以下控制器代码:

module.exports = Rose;

function Rose(init){

}

Rose.prototype.index = function(c){
    c.send('Controller ROSE,  Function Index');
};

Rose.prototype.thorne = function thorne(c){
    c.send('Controller ROSE, Function Thorne');
};

我在routes.js文件中定义了以下路由:

exports.routes = function (map) {

    map.resources('rose', function(flower){
         //flower.get('thorne', '#thorne');
        flower.get('thorne');
    });
};

我已经在routes.js中尝试了map.resources中的两行(当前已经注释了一行,但之前已经使用过)。

关注网址:

http://localhost:3000/rose

但是以下网址不起作用:

http://localhost:3000/rose/thorne

它显示以下错误:

Express
500 Error: Undefined action rose#show(/rose/thorne)

有人可以指导我做错了什么以及如何纠正。

1 个答案:

答案 0 :(得分:1)

CompoundJS CRUD允许查看模型列表,以及操作单个数据的方法。使用.resources时,会生成多个路由。您可以通过运行compound routes(或简称为compound r)来查看它们。下面的一些例子使用玫瑰(复数):

roses GET        /roses.:format?          roses#index - Should return a list of roses
rose GET         /roses/:id.:format?      roses#show  - Displays a single rose
edit_rose GET    /roses/:id/edit.:format? roses#edit  - Brings up an edit form for a single rose

在绘制花的路线时,compoundjs希望您将花映射到一个花。路线定义为:

thorne_rose GET  /roses/:rose_id/thorne   roses#thorne

你必须通过一个玫瑰ID来访问特定玫瑰的荆棘。但是,如果您打算只有一朵玫瑰(没有玫瑰或任何东西的列表),您可以将单身选项添加到资源中:

map.resources('rose', { singleton: true }, function(flower) {
    flower.get('thorne');
});

这也将消除索引路由,而不是使用Rose.prototype.show。在典型的CRUD中,索引列出了模型中的所有值。由于只有一个值,因此不需要列表页面。