Я использую sequelizejs с приложением expressjs.

Вот код моей модели пользователя.

< Сильный > user.js

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define('User', {
    first_name: DataTypes.STRING,
    last_name: DataTypes.STRING,
    bio: DataTypes.STRING,
    email: DataTypes.STRING,
    profile_picture: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
      }
    }
  }, {
    tableName: 'users'
  });
  return User;
};

Вот мой пользовательский контроллер

< Сильный > userComponent.js

const express = require( 'express' )
const router  = express.Router()
const User    = require( '../../models/user' )

router.get( '/user', ( req, res, next ) => {
  User.findAll()
    .then( userResponse => {
      res.status( 200 ).json( userResponse )
    } )
    .catch( error => {
      res.status( 400 ).send( error )
    } )
} )

module.exports = router

Но когда я пытаюсь получить данные, он выдает следующие ошибки:

Ошибка типа: User.findAll не является функцией в router.get (D: \ StateBoard-Project \ v2 \ components \ user \ userComponent.js: 6: 8) в Layer.handle [как handle_request] (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ layer.js: 95: 5) на следующем (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ route.js: 137: 13) на маршруте. отправка (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ route.js: 112: 3) в Layer.handle [как handle_request] (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ layer.js: 95: 5) в D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index.js: 281: 22 в Function.process_params (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index.js: 335: 12) в следующем (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index.js: 275: 10) в Function.handle (D : \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index.js: 174: 3) на маршрутизаторе (D: \ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index .js: 47: 12)

enter image description here

Вот файл model / index.js, который был автоматически сгенерирован Sequelize.

const fs        = require( 'fs' )
const path      = require( 'path' )
const Sequelize = require( 'sequelize' )
const basename  = path.basename( module.filename )
const env       = process.env.NODE_ENV || 'development'
const config    = require( __dirname + '/..\database.json' )[env]
const db        = {}

let sequelize
if (config.use_env_variable) {
  sequelize = new Sequelize( process.env[ config.use_env_variable ] )
} else {
  sequelize = new Sequelize( config.database, config.username, config.password, config )
}

fs
  .readdirSync( __dirname )
  .filter( function( file ) {
    return ( file.indexOf( '.' ) !== 0 ) && ( file !== basename ) && ( file.slice( -3 ) === '.js' )
  } )
  .forEach( function( file ) {
    var model = sequelize[ 'import' ]( path.join( __dirname, file ) )
    db[ model.name ] = model
  });

Object.keys( db ).forEach( function( modelName ) {
  if ( db[ modelName ].associate ) {
    db[ modelName ].associate( db )
  }
});

db.sequelize = sequelize
db.Sequelize = Sequelize

module.exports = db

Чего здесь не хватает?

2
rakibtg 27 Май 2017 в 19:06

2 ответа

Лучший ответ

Вы должны требовать models / index.js для использования моделей, а не models / user.js.

const models = require( '../../models/index');

router.get( '/user', ( req, res, next ) => {
  models.User.findAll()
    .then( userResponse => {
      res.status( 200 ).json( userResponse )
    })
    .catch( error => {
      res.status( 400 ).send( error )
    })
} )
10
Tilekbekov Yrysbek 28 Май 2017 в 10:08

Ваш файл user.js экспортирует функцию, но вы ее никогда не создавали.

module.exports = function(sequelize, DataTypes) { // <-- function

Когда вам это нужно

const User = require('../../models/user')

Теперь User является ссылкой на эту функцию. Откуда он берет sequelize и DataTypes?

2
borislemke 27 Май 2017 в 16:10