【问题标题】:Sequelize: cannot find module (Model)Sequelize:找不到模块(模型)
【发布时间】:2018-01-28 11:06:07
【问题描述】:

我有一个启用了 Sequelize 和 Webpack 的 Node 环境。

这是 Webpack 生成我的构建的路径:

./bin/builds.js

这是我使用 Sequelize CLI 生成模型的路径:

./src/models

在这个文件夹中有我的模型和一个包含 Sequelize 生成的脚本的索引文件。该脚本获取所有模型并导出它们,但在我的情况下它不起作用。

这是错误:

Error: Cannot find module '/Library/WebServer/Documents/private/my-project/bin/src/models/currency.js'

当模型位于 /my-project/src 中时,脚本会尝试获取构建路径 (/bin/) 中的模型。

我通过在 index.js 中编辑下面的行来解决这个问题:

var model = sequelize['import'](path.join(__dirname, file));

进入:

var model = sequelize['import'](path.join('../'+__dirname, file));

但我想找到一种更好的方法来修复它,因为通过修复 index.js 我认为其他文件会再次发生该错误。

这是我的 webpack 配置:

const webpack = require('webpack');
const path = require('path');
const fs = require('fs');
const nodeModules = {};


 fs.readdirSync(path.resolve(__dirname, 'node_modules'))
     .filter(function(x) {
         return ['.bin'].indexOf(x) === -1;
     })
     .forEach(function(mod) {
         nodeModules[mod] = 'commonjs ' + mod;
     });

module.exports =

    {
        name: 'server',
        target: 'node',
        entry: './app.js',
        output: {
            path: __dirname+'/bin/',
            publicPath: '/',
            filename: 'server.js'
        },
        node: {
            __filename: true,
            __dirname: true
        },
        externals: [nodeModules],
        module: {
            loaders: [
                { test: /\.js$/,
                    loaders: [
                        'babel-loader'
                    ]
                },
                { test:  /\.json$/, loader: 'json-loader' },
            ]
        }
    };

注意:我已经尝试将 publicPath 替换为 '/',但它不起作用。

【问题讨论】:

    标签: javascript sequelize.js


    【解决方案1】:

    我遇到了同样的问题,我的解决方案是手动将模型导入 index.js

    'use strict'
    
    var Sequelize = require('sequelize')
    var env = process.env.NODE_ENV || 'development'
    var config = require(__dirname + '/../config/config.json')[env]
    var db = {}
    
    if (config.use_env_variable) {
      var sequelize = new Sequelize(process.env[config.use_env_variable], config)
    } else {
      var sequelize = new Sequelize(config.database, config.username, config.password, config)
    }
    
    const models = [
      require('./Person')(sequelize, Sequelize),
      require('./Animal')(sequelize, Sequelize)
    ]
    models.forEach(model => {
      db[model.name] = model
    })
    
    models.forEach(model => {
      if (db[model.name].associate) {
        console.log('entered', model.name)
        db[model.name].associate(db)
      }
    })
    
    db.sequelize = sequelize
    db.Sequelize = Sequelize
    
    module.exports = db
    

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 2021-05-13
      • 2016-04-27
      • 1970-01-01
      • 2022-12-15
      • 2018-02-21
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      相关资源
      最近更新 更多