我正在尝试将用户模型从 adonis 迁移到 postgres,但我不断收到此错误Primary key value is missing for user我的模型看起来像这样:class User extends Model { static boot () { super.boot() this.addHook('beforeSave', async (userInstance) => { if (userInstance.dirty.password) { userInstance.password = await Hash.make(userInstance.password) } }) } tokens () { return this.hasMany('App/Models/Token') }}module.exports = User我尝试运行的迁移是:/** @type {import('@adonisjs/lucid/src/Schema')} */const Schema = use('Schema')class UserSchema extends Schema { up () { this.create('users', (table) => { table.increments() table.string('username', 80).notNullable().unique() table.string('email', 254).notNullable().unique() table.string('password', 60).notNullable() table.timestamps() }) } down () { this.drop('users') }}module.exports = UserSchema我尝试添加primary()假设table.increments()它正在 postgre 数据库中生成自动增量 id。当我检查数据库时,有时会添加用户,但 id 从 2 到 4 等等控制器看起来像这样const User = use('App/Models/User')class UserController { async register({request, auth, response}) { const username = request.input("username") const email = request.input("email") const password = request.input("password") let user = new User() user.username = username user.email = email user.password = password user = await user.save() let accessToken = await auth.generate(user) return response.json({"user": user, "access_token": accessToken}) } async login({request, auth, response}) { const email = request.input("email") const password = request.input("password"); try { if (await auth.attempt(email, password)) { let user = await User.findBy('email', email) let accessToken = await auth.generate(user) return response.json({"user":user, "access_token": accessToken}) } } catch (e) { return response.json({message: 'You first need to register!'}) } }
3 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
问题是您覆盖user了user = await user.save().
只需将结果存储await user.save()在新变量中即可解决问题。
例如:
...
let saved = await user.save()
let accessToken = await auth.generate(user)
...
倚天杖
TA贡献1828条经验 获得超3个赞
table.increments()
需要列名作为参数 ->table.increments(name)
例子 :
table.increments('id').primary()
MM们
TA贡献1886条经验 获得超2个赞
问题在于
user = await user.save()
true
当用户保存到数据库时将返回,将其传递给auth.generate
是导致该错误的原因。
只需使用类似的东西
let success = await user.save()
并检查成功值。仅当用户已保存(为 true)时,可能才想返回令牌和 200 状态success
。
添加回答
举报
0/150
提交
取消