问题描述
寻找// HERE IS THE PROBLEM PART
句子以查找有问题的代码。
我正在尝试使用AWS Lambda(连接到RDS Postgres服务器)作为数据源来实现AppSync。我想创建一个puKnowledgeFile
查询,该查询将使用可选参数更新我的KnowledgeFile
。如果客户端仅提供htmlText
和properties
作为参数,那么我的update
查询应仅更新这两个字段。
type Mutation {
putKnowledgeFile(
id: ID!,htmlText: String,plainText: String,properties: AWSJSON
): KnowledgeFile
}
type KnowledgeFile {
id: ID!
htmlText: String!
plainText: String!
properties: AWSJSON!
lastDateTimeModified: AWSDateTime!
dateTimeCreated: AWSDateTime!
}
这是一段AWS Lambda代码:
exports.handler = async (event,context,callback) => {
/* Connecting to Postgres */
let data = null;
let query = ``;
let values = [];
switch (event.info.fieldName) {
case "putKnowledgeFile":
if(event.arguments.htmlText === undefined &&
event.arguments.plainText === undefined &&
event.arguments.properties === undefined) {
callback(`At least one argument except id should be provided in putKnowledgeFile request`);
}
// HERE IS THE PROBLEM PART
query += `update knowledge_file`
query += `
set `;
let index = 0;
for (let fieldName in event.arguments) {
if(arguments.hasOwnProperty(fieldName)) {
const fieldValue = event.arguments[fieldName];
if(index === 0) {
query += `${fieldName}=$${index+1}`
values.push(fieldValue);
} else {
query += `,${fieldName}=$${index+1}`
values.push(fieldValue);
}
index++;
}
}
query += `
where knowledge_file.id = $${index+1};`;
values.push(event.arguments.id);
// HERE IS THE PROBLEM PART
break;
default:
callback(`There is no functionality to process this field: ${event.info.fieldName}`);
return;
}
let res = null;
try {
res = await client.query(query,values); // just sending created query
} catch(error) {
console.log("@client.query");
console.log(error);
}
/* DisConnecting from Postgres */
callback(null,res.rows);
};
基本上,此算法通过多个字符串串联创建我的查询字符串。我认为它太复杂且容易出错。 有没有一种方法可以轻松地根据某些参数的存在/不存在来创建动态查询?
以防万一,这是我的PostgreSQL模式:
-- main client object for clients
CREATE TABLE client (
id bigserial primary key,full_name varchar(255)
);
-- knowledge_file
create table knowledge_file (
id bigserial primary key,html_text text,plain_text text,properties jsonb,last_date_modified timestamptz,date_created timestamptz,word_count varchar(50)
);
-- which client holds which knowledge file
create TABLE client_knowledge_file (
id bigserial primary key,client_id bigint not null references client(id),knowledge_file_id bigint not null references knowledge_file(id) unique ON DELETE CASCADE
);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)