所以,我正在学习strongloop API,并扩展我的API:https://docs.strongloop.com/display/public/LB/Extend+your+API
我修改了getName
示例:
Node.setData = function(response, cb) {
console.log(response)
// cb(null, response);
};
Node.remoteMethod(
'setData',
{
http: {path: '/:id/setData', verb: 'get'},
accepts: [
{arg:'data', type:'string'},
{arg:'id', type:'string', required: true}
],
returns: {arg: 'setData', type: 'string'},
description: [ 'set some Data ']
}
);
哪个按预期工作(至少在列表中显示):
我希望澄清的内容无法在文档中的任何位置找到:
Node.updateAttribute('data', 'test')
之类的方法,因为在Node.setData
函数内部我得到了未定义的方法。我认为它是persistedModel
的一部分但是,我使用它对我来说是一个谜。cb()
未定义,而在示例中应该有效我也用动词post
尝试了它,但这不应该,我希望能够在收到请求时将一些数据写入数据库。
我可能不是第一个发现Strongloop相当陡峭的学习曲线的人。有人知道任何能让我更好理解的教程吗?我已经完成了核心概念并开始使用,但我觉得我根本没有开始。
答案 0 :(得分:1)
您可以通过设置指向本地计算机上的mongodb实例(或MongoLab等远程MongoDB服务)的数据源来告知MongoDB存储内容:
假设您已在本地运行mongod并安装了mongodb连接器,请将其添加到datasources.json
:
"mongoDS": {
"host": "localhost",
"port": 27017,
"database": "databasename",
"username": "dbo",
"password": "password",
"name": "mongoDS",
"connector": "mongodb"
}
然后,您需要配置所有模型定义,以使用上面mongoDS
内的model-config.json
:
...snip...
"User": {
"dataSource": "mongoDS",
"public": true
},
"AccessToken": {
"dataSource": "mongoDS",
"public": false
},
"ACL": {
"dataSource": "mongoDS",
"public": false
},
...snip...
有关详细信息,请参阅https://docs.strongloop.com/display/public/LB/MongoDB+connector。
将数据写入数据库的“环回方式”是通过实例化和使用您在common/models
文件夹中定义的模型。要查看默认情况下loopback附带的模型,您可以查看node_modules/loopback/common/models
文件夹。查看user.js
文件,了解如何管理应用用户以及定义所有功能的位置。这就是“神奇”的地方。 ;)
为了使用node.updateAttributes()
之类的方法,您需要首先使用其中一个内置查询方法(如Node.findById()
获取Node模型的实例:
Node.findById(1, function(err, nodeInstance) {
if(err) return(err);
// nodeInstance is now the node instance obj with id = 1
// inside this callback function
nodeInstance.updateAttributes({name: 'Fred'}, function() {...})
});
这假设存在一个id为1且具有name
属性的Node条目,您可以使用Loopback REST Explorer创建该条目。在您的示例代码中,您创建的setData()
远程方法是一种“类方法”,它没有与之关联的特定节点实例。即使在远程方法中,您也需要使用Model.find()和其他方法来获取实例结果,以便在它们上使用实例方法。
https://docs.strongloop.com/display/public/LB/Remote+methods
cb
回调参数是远程方法成功或失败时需要调用的函数,以便API可以继续处理并成功返回。对于成功案例,请执行
cb(null, response);
,对于错误案例,
cb(error, null);
另外,只需记下您发布的代码,您所在的位置
Node.setData = function(response, cb) {...}
而不是function(response, cb)
,应该是function(data, id)
,以匹配
accepts: [
{arg:'data', type:'string'},
{arg:'id', type:'string', required: true}
]
因为远程方法需要2个字符串参数,一个名为data
,另一个名为id
。