我有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)
有人可以指导我做错了什么以及如何纠正。
答案 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中,索引列出了模型中的所有值。由于只有一个值,因此不需要列表页面。