Knex中knex().select('id').from('users')与knex('users').select('id')有何区别?
Knex两种查询写法的差异解答
这两种Knex查询写法完全没有功能差异,最终生成并执行的SQL语句完全一致,只是调用顺序不同而已:
knex().select('id').from('users'):先初始化Knex查询构建器,通过select()指定要查询的字段,再用from()关联目标表knex('users').select('id'):直接以目标表名作为参数初始化查询构建器,再通过select()指定要查询的字段
两种写法最终都会生成相同的SQL:
SELECT `id` FROM `users`;
针对你的登录校验代码的小提示
- Knex的查询是异步操作,需要返回Promise或者使用
await处理结果,否则无法获取查询到的用户信息:
async function checkLogIn(email, username, password) { const user = await knex("users") .select("id") .where({ email: email, username: username, password: password, }) .first(); // 用first()获取单条结果,避免返回数组 return user ? true : false; }
- 绝对不要明文存储密码,应该在用户注册时对密码进行哈希(比如使用
bcrypt),登录时用哈希值比对,避免数据库泄露导致用户密码直接暴露。
内容的提问来源于stack exchange,提问作者StackOverflAXEL
相关产品推荐
相关产品推荐

