Модуль с ошибкой выброса MongoDB не найден: ‘module’

#mongodb #mongoose #webpack

#mongodb #mongoose #webpack

Вопрос:

У меня установлена база данных Mongo db на localhost: 27017, и я пытаюсь подключиться к ней из моего приложения, которое использует Webpack через Mongoose. У меня установлен Mongoose в виде пакета. Вот мой код:

 import mongoose from 'mongoose';
var db = mongoose.connect('mongodb://localhost:27017/music-app');

mongoose.connection.once('connected', function() {
    console.log("Connected to database")
});
  

Я почти уверен, что правильно следовал документации, но он выдает следующую ошибку компиляции:

 Error in ./~/mongoose/~/mongodb/~/mongodb-core/~/require_optional/~/resolve-from/index.js
Module not found: 'module' in C:UsersnewDesktopDevelopment Projectsmusic-appnode_modulesmongoosenode_modulesmongodbnode_modulesmongodb-corenode_modulesrequire_optionalnode_modulesresolve-from
  

В консоли также есть другая ошибка:

 webpackHotDevClient.js:216 Error in ./~/mongoose/~/mongodb/lib/mongo_client.js
Module not found: 'dns' in C:UsersnewDesktopDevelopment Projectsmusic-appnode_modulesmongoosenode_modulesmongodblib

 @ ./~/mongoose/~/mongodb/lib/mongo_client.js 12:10-24
  

Кто-нибудь видел это раньше и знает, как это решить? Есть ли дополнительные пакеты, которые мне, возможно, потребуется установить в node?

Ответ №1:

Эта ошибка вызвана тем, что вы пытаетесь использовать его mongodb из браузера, поскольку create-react-app это интерфейсное приложение. Вам следует использовать внутренний сервер и использовать mongodb оттуда.

Вы можете проверить это, это репозиторий с полным стеком, имеющий nodejs сервер с create-react-app интерфейсом. https://github.com/fullstackreact/food-lookup-demo

Ответ №2:

Это потому, что Webpack не может статически анализировать, если ( typeof window === 'undefined' ) в mongoose/lib/drivers/index.js

Вот решение:

 webpackConfig.plugins = [
...,
new webpack.DefinePlugin({
'typeof window': ""object""
}),
...
]

Also, if you get error messages regarding mongoose, check out below configurations.

npm install node-loader --save-dev
npm install require_optional --save-dev
npm install module --save-dev

webpack.config.js

const webpackConfig = {
name : 'client',
target : 'web',
devtool : config.compiler_devtool,
resolve : {
root : paths.client(),
extensions : ['', '.js', '.jsx', '.json', '.coffee', '.node']
},
node: {
fs: 'empty',
net: 'empty',
tls: 'empty'
},
module : {}
}

// ------------------------------------
// Loaders
// ------------------------------------
// JavaScript / JSON

webpackConfig.module.loaders = [{
test : /.(js|jsx)$/,
exclude : /node_modules/(?!(lodash-es)/).*/,
loader : 'babel',
query : config.compiler_babel
}, {
test : /.json$/,
loader : 'json'
}, {
test: /.coffee$/,
loader: 'coffee-loader',
exclude: /node_modules|lib/
}, {
test: /.node$/,
loader: 'node-loader'
}]