【问题标题】:How to change sequelize model.findOne() target table?如何更改 sequelize model.findOne() 目标表?
【发布时间】:2020-04-19 01:32:37
【问题描述】:

我是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 函数搜索用户表而不是用户表?

【问题讨论】:

    标签: javascript mysql reactjs database sequelize.js


    【解决方案1】:

    您可以将模型的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
    });
    

    【讨论】:

      猜你喜欢
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多