如何解决如何使用knex重写原始SQL查询?
我才刚刚开发,这是我第一次使用knex。
问题: 我有一个原始的SQL查询,可以正常工作。现在,我正在尝试使用knex进行此查询。为了了解一切工作原理,我想:
- 使用knex.raw重写查询
- 使用knex查询构建器重写查询。
有人可以帮我吗?顺便说一句,我正在使用Postgres和Next.js。 通过运行下面的代码,我得到“ UnhandledPromiseRejectionWarning:错误:预期1绑定,看到0”。我不知道问题是否在这里:
typeof req.query.word ==='字符串'? [req.query.word]:req.query.word)
...所以我已经尝试重写它(使用[]),但是没有用。这是代码:
const getTranslation = (req,res) => {
const params =
typeof req.query.word === 'string'
? req.query.word
: req.query.word.map((_,index) => `$${index + 1}`);
console.log(req.query.word);
knex.raw(
`SELECT "Translation","Words" FROM "Dictionary" WHERE "Words" IN (${
typeof req.query.word === 'string' ? '($1)' : params.join(',')
})`,typeof req.query.word === 'string' ? [req.query.word] : req.query.word)
.then((error,result) => {
const wordArray = typeof req.query.word === 'string' ? [req.query.word] : req.query.word;
if (error) {
throw error;
}
const wordOrder = req.query.word;
result.rows.sort((row1,row2) => {
return wordOrder.indexOf(row1.Words) - wordOrder.indexOf(row2.Words);
});
res.status(200).json(result.rows);
}
);
};
我尝试过的事情: 我尝试使用以下简单查询来检查配置是否正常运行。我认为是的:终端(网络)显示状态为200的请求,并且我在控制台中看到了数据...
const getTranslation = (req,res) => {
knex.select("Words","Translation").from("Dictionary")
.then(rows =>
rows.map(row => {
console.log(row)
}))
}
谢谢!
解决方法
您的查询应如下所示:
const results = await knex('Dictionary')
.columns(['Translation','Words'])
.whereIn('Words',req.query.word); // assumes that `req.query.word` is array with strings/numbers
,
请记住,我实际上并不认识Knex。
但是当我在下面的链接中查看问题的一些答案时,我注意到他们使用了“ Knex.with()”
How to add two bind params in knex?
knex.with('with_alias',knex.raw('select * from "lyrics" where "for_id" = ? and "var" = ?',[var1,var2])).select('*').from('with_alias')
因此,似乎他们将其与“ With_alias”绑定在一起。
他们还指定您应该尝试在数组中传递变量。
希望这对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。