#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'
}]