簡體   English   中英

如何更改 sequelize model.findOne() 目標表?

[英]How to change sequelize model.findOne() target table?

我是sequelize.js 我有一個模型用戶。 我嘗試使用 findOne 函數來檢查用戶是否存在。

這是我的用戶模型。

const Sequelize = require('sequelize')
const db = require('../database/db.js')

module.exports = db.sequelize.define(
  'user',
  {
    id: {
      type: Sequelize.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    name: {
      type: Sequelize.STRING
    },
    email: {
      type: Sequelize.STRING
    },
    username: {
      type: Sequelize.STRING
    },
    password: {
      type: Sequelize.STRING
    },
    address: {
      type: Sequelize.STRING
    },
    created: {
      type: Sequelize.DATE,
      defaultValue: Sequelize.NOW
    },
    role: {
      type: Sequelize.STRING
    }
  },
  {
    timestamps: false
  }
)

這就是我檢查用戶的方式。

const express = require('express')
const users = express.Router()
const cors = require('cors')
const jwt = require('jsonwebtoken')
const bcrypt = require('bcrypt')

const User = require('../../models/User')
users.use(cors())

process.env.SECRET_KEY = 'secret'

users.post('/register', (req, res) => {
    console.log("testing register zzz");
  const today = new Date()
  const userData = {
    name: req.body.name,
    email: req.body.email,
    username: req.body.username,
    password: req.body.password,
    address: req.body.address,
    created: today,
    role: req.body.role
  }

  User.findOne({
    where: {
      email: req.body.email
    }
  }).then(user => {
      if (!user) {
          console.log("not inside database");
        bcrypt.hash(req.body.password, 10, (err, hash) => {
          userData.password = hash
          User.create(userData)
            .then(user => {
              res.json({ status: user.email + 'Registered! liao' })
            })
            .catch(err => {
              res.send('error: ' + err)
            })
        })
      } else {
          console.log("inside database");
        res.json({ error: 'User already exists' })
      }
    })
    .catch(err => {
        console.log("??????  "+err);
      res.send('error: ' + err)
    })
})

但是,我收到一條錯誤消息,顯示表users不存在。 mysql 數據庫中的表名是user 如何更改 findOne 目標表名稱,以便 findOne 函數搜索用戶表而不是用戶表?

您可以將模型的freezeTableName屬性設置為true以禁用 sequelize 默認情況下的模型名稱復數形式。

請參考sequelize docs 中給出的以下示例

var User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING,
    field: 'first_name' // Will result in an attribute that is firstName when user facing but first_name in the database
  },
  lastName: {
    type: Sequelize.STRING
  }
}, {
  freezeTableName: true // Model tableName will be the same as the model name
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM