Я создаю API в nodejs с Express и Sequelize.
У меня есть модель , называемая пользователи , контроллер named UserController и маршрутизатор с именем apiRouter
Когда я пытаюсь использовать метод findOne в модели моего пользователя I получить эту ошибку:
TypeError: user.findOne is not a function
at register (C:\Users\romain\Desktop\T-WEB-700\routes\usersController.js:52:14)
at Layer.handle [as handle_request] (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\romain\Desktop\T-WEB-700\node_modules\express\lib\router\index.js:47:12)
Вот моя модель:
module.exports = (sequelize, DataTypes) => {
var users = sequelize.define('Users', {
user_key_id: DataTypes.CHAR(30),
name: DataTypes.CHAR,
surname: DataTypes.CHAR,
email: DataTypes.CHAR,
encrypted_password: DataTypes.CHAR,
email_verification_token: DataTypes.CHAR,
email_verification_status: DataTypes.BOOLEAN,
}, {});
users.associate = function(models) {
// associations can be defined here
users.hasMany(models.currency_user);
users.hasMany(models.user_feed);
users.hasMany(models.user_role);
users.hasOne(models.roles);
};
return users;
};
здесь мой контроллер:
var bcrypt = require('bcrypt')
var jwt = require('jsonwebtoken')
var user = require('../models').users
function makeid() {
var isUnique = false
var count = 0
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,?;.:/!§ù%$^¨*µ#';
var charactersLength = 30;
while(isUnique != true)
{
for ( var i = 0; i < 30; i++ ) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return user.find({
where: {
id: userDeviceId
}
}).then(function(device) {
if (!device) {
isUnique = true
}
else if(count > 1000000000)
{
return false
}
})
.catch(function(error) {
return false
})
}
return result;
}
module.exports = {
register: function(req, res) {
var name = req.body.name
var surname = req.body.surname
var password = req.body.password
var email = req.body.email
if(email == null || name == null || surname == null || password == null)
{
return res.status(400).json({ 'error': 'Missing parameters !' })
}
user.findOne({
attributes: ['email'],
where: {email: email}
})
.then(function(userFound) {
if(!userFound)
{
var key = makeid()
if(key == false)
return res.status(500).json({ 'error': 'Cannot generate unique key ! (no slots or too much attempt !)'})
bcrypt.hash(password, 5, function( err, pwd) {
var newUser = models.users.create({
email: email,
user_key_id: key,
name: name,
surname: surname,
password: pwd
})
var newRoleForUser = models.user_role.create({
role_id: ',E<i8€?G7Lfm37µCµ96ZGr42b_mhfP',
user_id: key
})
})
} else
{
return res.status(409).json({ 'error': 'User already exist !'})
}
})
.catch(function(err) {
return res.status(500).json({ 'error': 'Unable to verify user !'})
})
},
login: function(req, res) {
var password = req.body.password
var email = req.body.email
if(password == null || email == null)
{
return res.status(400).json({ 'error': 'Missing parameters !' })
}
}
}
и вот мой роутер:
const express = require('express')
const userControl = require('./routes/usersController')
exports.router = (function() {
var apiRouter = express.Router()
apiRouter.route('/users/register/').post(userControl.register)
apiRouter.route('/users/login/').post(userControl.login)
return apiRouter
})()
Некоторое время я ищу ошибку в документации и форумах, но не могу найти решения.
Это мой первый пост о переполнении стека, поэтому, если у вас есть какие-либо советы, чтобы сделать мои посты красивее, я буду очень признателен.
Заранее спасибо:)