繁体   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