0

我有 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)

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

4

1 回答 1

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 中,索引列出了模型中的所有值。由于只有一个值,因此不需要列表页面。

于 2013-12-05T06:08:04.497 回答