我对Sails.js很新,但对MVC来说并不陌生。我觉得我很亲密,但只是在某处遗漏了某些东西。
我生成了一个带有单个动作“概述”的控制器,如果我保持“hello world” - 很简单,它就可以了。下面的代码运行得很好:
// My controller
module.exports = {
overview : function(req, res) {
return res.send("<h1>Tossel<h1>");
},
}
但是,当我尝试从模型中获取一些数据并将其传递给控制器时,我遇到了问题。我试过两种方式。我首先在Model上定义了一个自定义方法,并从我的控制器中调用它,如下所示:
// My model, e.g. Orders
module.exports = {
tableName: 'Orders',
attributes: {
id : {
type: 'integer',
primaryKey: true,
unique: true
},
client_id : {
type: 'integer'
}
},
getAllOrders: function(opts, cb) {
Orders.find().exec(function(err, data) {
cb(err, data);
});
}
};
// My controller
module.exports = {
overview : function(req, res) {
Orders. getAllOrders(null, function(err, data) {
return res.send(data);
});
},
}
从我在文档中看到的内容来看,这就是我应该如何做到的。我收到以下错误。我在控制台中执行命令时,通过从控制器调用它来获取此信息:
TypeError: query.exec is not a function
然后我尝试在控制器中执行所有操作:
// My controller
module.exports = {
overview : function(req, res) {
Orders.find().exec(function(err, data) {
return res.send(data);
});
},
}
这个方法实际上没有抛出任何错误,但它什么也没有返回。我很确定数据库中有数据。由于我不是100%肯定,我在控制器中创建了一个“添加”操作,如下所示,以向表中添加数据。这样可以避免错误,但页面会挂起。
module.exports = {
overview : function(req, res) {
Orders.find().exec(function (err, data) {
return res.json(data);
});
},
add : function(req, res) {
var data = {
id: 1,
client_id: 1,
};
Orders.create(data).exec(function (err, data) {
return res.send(data);
});
}
};
有人可以在这里指出我正确的方向。我发现文档太简单了。它很擅长向你展示简单的东西,但这就是它的全部。
此外,作为奖励,有人可以告诉我我需要做些什么才能进行更改并刷新页面才能看到它们吗?目前我必须杀死服务器并重新启动以查看更改。这似乎不对,我必须在某处遗漏某些东西。
修改
根据以下评论:
Node v8.10.0
Sails v0.12.14
我指定了表名,因为它确实与模型名称不同。我在我发布的代码中更改了表和模型的实际名称。