rak*_*btg 0 javascript node.js express sequelize.js
我将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;
};
Run Code Online (Sandbox Code Playgroud)
这是我的用户控制器
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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试获取数据时,它将引发以下错误:
TypeError:User.findAll在layer.handle处的router.get(D:\ StateBoard-Project \ v2 \ components \ user \ userComponent.js:6:8)处不是一个函数[as handle_request](D:\ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ layer.js:95:5),然后在Route(D:\ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ route.js:137:13)。在Layer.handle上调度(D:\ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ route.js:112:3)[作为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 \在Function.handle(D)的下一个(D:\ StateBoard-Project \ v2 \ node_modules \ express \ lib \ router \ index.js:275:10)处的node_modules \ express \ lib \ router \ index.js:335:12) :路由器上的\ 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 )
这是由Sequelize自动生成的model / index.js文件。
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
Run Code Online (Sandbox Code Playgroud)
这里缺少什么?
您应该在要使用模型的地方要求使用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 )
})
} )
Run Code Online (Sandbox Code Playgroud)