亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Adonis JS 用戶缺少主鍵值

Adonis JS 用戶缺少主鍵值

德瑪西亞99 2023-07-06 09:57:51
我正在嘗試將用戶模型從 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)

...


查看完整回答
反對 回復 2023-07-06
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

table.increments()需要列名作為參數 ->table.increments(name)

例子 :

table.increments('id').primary()


查看完整回答
反對 回復 2023-07-06
?
MM們

TA貢獻1886條經驗 獲得超2個贊

問題在于

user = await user.save()

true當用戶保存到數據庫時將返回,將其傳遞給auth.generate是導致該錯誤的原因。

只需使用類似的東西

let success = await user.save()

并檢查成功值。僅當用戶已保存(為 true)時,可能才想返回令牌和 200 狀態success。


查看完整回答
反對 回復 2023-07-06
  • 3 回答
  • 0 關注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號