Postgresql strong是否使用Postgres循环查询/存储过程?
根据文档,StrongLoop不支持运行自定义sql语句。 我无法理解任何人如何认为你可以通过简单的连接构建一个企业应用程序,但我确实发现这篇文章说你可以做到: 但这是MySql的。当我尝试使用Postgres时,我得到错误:“类型为“object”的参数“byId”的值无效:0。收到的类型已转换为数字。”并且它不返回任何数据。这是我的密码:Postgresql strong是否使用Postgres循环查询/存储过程?,postgresql,loopbackjs,strongloop,Postgresql,Loopbackjs,Strongloop,根据文档,StrongLoop不支持运行自定义sql语句。 我无法理解任何人如何认为你可以通过简单的连接构建一个企业应用程序,但我确实发现这篇文章说你可以做到: 但这是MySql的。当我尝试使用Postgres时,我得到错误:“类型为“object”的参数“byId”的值无效:0。收到的类型已转换为数字。”并且它不返回任何数据。这是我的密码: module.exports = function(account) { account.byId = function(byId, cb){
module.exports = function(account) {
account.byId = function(byId, cb){
var ds=account.dataSource;
var sql = "SELECT * FROM account where id > ?";
ds.connector.execute(sql, [Number(byId)], function(err, accounts) {
if (err) console.error(err);
console.info(accounts);
cb(err, accounts);
});
};
account.remoteMethod(
'byId',
{
http: {verb: 'get'},
description: "Get accounts greater than id",
accepts: {arg: 'byId', type: 'integer'},
returns: {arg: 'data', type: ['account'], root: true}
}
);
};
对于部件[Number(byId)],我也尝试了[byId]和仅仅使用byId。什么都不管用
有什么想法吗?到目前为止,我非常喜欢StrongLoop,但Postgresql连接器似乎还没有准备好投入生产。如果这不起作用,我下一步将做一个带帆的原型-(以下是
arg
的类型为“integer”,无效。请使用“Number”。请检查下面更正的代码:
module.exports = function(account) {
account.byId = function(byId, cb){
var ds = account.dataSource;
var sql = "SELECT * FROM account WHERE id > $1";
ds.connector.execute(sql, byId, function(err, accounts) {
if (err) console.error(err);
console.info(accounts);
cb(err, accounts);
});
};
account.remoteMethod(
'byId',
{
http: {verb: 'get'},
description: "Get accounts greater than id",
accepts: {arg: 'byId', type: 'Number'},
returns: {arg: 'data', type: ['account'], root: true} //here 'account' will be treated as 'Object'.
}
);
};
注意:MySQL的准备语句本机使用?
作为参数占位符,但PostgreSQL使用$1
,$2
等
希望这对您有效。否则,请尝试使用
[byId]
而不是byId
,如所示。以下是arg
类型为“整数”,无效。请改用“数字”。检查下面更正的代码:
module.exports = function(account) {
account.byId = function(byId, cb){
var ds = account.dataSource;
var sql = "SELECT * FROM account WHERE id > $1";
ds.connector.execute(sql, byId, function(err, accounts) {
if (err) console.error(err);
console.info(accounts);
cb(err, accounts);
});
};
account.remoteMethod(
'byId',
{
http: {verb: 'get'},
description: "Get accounts greater than id",
accepts: {arg: 'byId', type: 'Number'},
returns: {arg: 'data', type: ['account'], root: true} //here 'account' will be treated as 'Object'.
}
);
};
注意:MySQL的准备语句本机使用?
作为参数占位符,但PostgreSQL使用$1
,$2
等
希望这对您有效。否则,请尝试使用
[byId]
而不是按照。进行进一步测试,这可能是StrongLoop Explorer未正确解析整数的错误。此错误仅在处理整数时发生,如果我将其更改为字符串,则会消失。但随后我得到了错误“错误:bind消息提供了1个参数,但准备好的语句\“\”需要0。明天我需要在不使用API资源管理器的情况下进行测试。我发现这对MySql很有效。它适用于数字和字符串。要使其与Postgresql一起工作,唯一的方法是从头开始构建sql字符串。”(将值连接到字符串中,而不让StrongLoop作为参数为我执行此操作)。请注意,您必须编写自己的代码来阻止sql注入。还有一件事,我查看了StrongLoop库的源代码,它们也不阻止sql注入。它们只是循环遍历参数并将值插入sql字符串。这是非常糟糕的做法。进一步测试后,这可能是Str的错误ongLoop资源管理器未正确解析整数。此错误仅在我处理整数时发生,如果我将其更改为字符串,则会消失。但随后出现错误“错误:绑定消息提供1个参数,但准备语句\“\”需要0“。我明天需要在不使用API资源管理器的情况下进行测试。我发现这对MySql很有效。它可以处理数字和字符串。要使它与Postgresql一起工作,唯一的方法是从头开始构建sql字符串(将值连接到字符串中,而不让StrongLoop作为参数为我执行此操作)。请注意,您必须编写自己的代码来阻止sql注入。还有一件事,我查看了StrongLoop库的源代码,它们也不阻止sql注入。它们只是循环遍历参数并将值插入sql字符串。这是一种非常糟糕的做法。感谢链接到环回连接器文档。我没有看到这一点,我一直在引用主要的StrongLoop文档。我将其切换为Number(以及[byId])现在它给了我一个错误“输入结束时的语法错误”。请参阅我上面的评论,您的答案适用于MySql,但不适用于Postgre。我假设Postgre库有缺陷。您好,请参阅此问题。我发现postgresql的占位符需要从?
更改为$1
。请让我在答案中指定。thanks查找到环回连接器文档的链接。我没有看到,我一直在引用主要的StrongLoop文档。我将其切换为Number(以及[byId])现在它给了我一个错误“输入结束时的语法错误”。请参阅我上面的评论,您的答案适用于MySql,但不适用于Postgre。我假设Postgre库有问题。请参阅。我发现postgresql的占位符需要从?
更改为$1
。让我在答案中指定这一点。