Не удалось найти файл объявления модуля mongodb
TL; DR . Ниже приведено подробное объяснение шагов, которые я выполнил, чтобы получить ошибку . Чтобы найти основной вопрос, перейдите к самому низу.
Я слежу за этой книгой addyosmani - основы-основы для создания простого приложения backbone.js с сервером узлов и mongodb в качестве внутреннего интерфейса.
Теперь, согласно уроку, я создал следующее:
В корне моего проекта и выполнил npm install , по какой-то причине это не сработало.
В результате был создан следующий файл package.json, который, по моему мнению, по сути совпадает с тем, который упоминался в руководстве:
Это создало ту же структуру папок, которая упоминается в руководстве:
И затем я успешно выполнил npm install без каких-либо ошибок.
Теперь, когда я создаю простой server.js файл и попытаться выполнить его с помощью команды node server.js я получаю следующую ошибку:
( Я могу предоставить полную трассировку, если необходимо ).
Я нашел эти StackOverflow posts относительно той же ошибки, и в ответах говорится, что мне нужно снова установить mongodb, используя npm .
Я запутался, потому что в книге ничего не говорится об этом шаге.
Я довольно новичок во всем, что я упомянул здесь, кроме основы - node.js , npm , mongodb и т. Д., Поэтому я могу упустить некоторые основные понятия.
Я хотел бы знать, возможно ли использовать существующую базу данных, которую я установил ранее, вместо загрузки и повторной установки через npm .
Если нет, почему требуется установить его снова с помощью npm , в чем разница между первоначальной установкой и npm установкой .
10 Answers 10
The error you are getting indicates that the NPM package for MongoDB is not correctly installed.
The fix here depends on how you plan to leverage NPM. The NPM package manager operates has two different modes of operation: local and global.
The first (and default) mode is "local".
If you go to the folder with server.js you will see a sub-folder named node_modules . Under that folder will be a mongodb folder. If that folder is not present, then the mongodb module is not installed on that path.
To correct this, cd to that folder and type npm install mongodb . When the process is done you should have the node_modules/mongodb folder available.
You can also install MongoDB package globally using npm install -g mongodb . This is useful if you are using lots of node.js command-line stuff, but less useful if you are deploying the whole thing.
Side Note: there is an evolving standard around package.json . The package.json is a standardized way of including all dependencies for a given module. This allows you to run npm update or npm install at the root of a project / package and effectively "pull in" all of the dependencies. This greatly simplifies the deployment process and the process of keeping your dependencies in-line.
It's worth to mention that if you installed it globally you'd have to link it using: npm link mongodb
After trying for some time to install it without success (since I'm new to mongo and node), I was missing the npm link step indeed. So just to summarize, I did this:
- npm install mongodb -g
- cd /path/to/my/app/folder
- npm link mongodb
With that in place, I could do this in my application file: require('mongodb').
Here are some references, in case you need them:
This Problem would have caused by one among the below reasons.
1) You have not installed mongodb module.
2) You have installed mongodb in global context but not linked to current application.
Solution
1) Traverse to application top directory and execute npm install mongodb , this will install mongodb module, and your project will automatically detect it.
or
2) Execute npm install mongodb -g to install mongo DB module globally and then Ttaverse to application top directory and link using command npm link mongodb command.
Usefull Links
You can do either of two things to make it run :-
1) Install mongodb globally with below steps :-
a) npm install mongodb -g
b) Go to your app directory, where module.js is located and then run
npm link mongodb
Explanation :- When you install a package globally via npm, it is downloaded to global node_module folder. For me(Mac user), it's under /usr/local/lib/node_modules/mongodb. We link this to that directory from where you are trying to run module.js.
2) Another approach is to install mongodb locally, not globally via
npm install mongodb
After following either of these, you will be seeing node_modules --> mongodb folder under the 'module.js' directory, which means mongodb has been successfully installed.
Install mongodb globally with below steps :-
a) npm install mongodb -g
b) Go to your app directory, where module.js is located and then run
npm link mongodb
Explanation :- When you install a package globally via npm, it is downloaded to global node_module folder. For me(Mac user), it's under /usr/local/lib/node_modules/mongodb. We link this to that directory from where you are trying to run module.js.
Error
Solved
npm install mongodb
Edit package.json = "mongodb": "^3.0.1", change "mongodb": "3.0.1",
I am new to MongoDB. After spending hours of installing mongodb through npm, I finally got the picture. See, there are actually three "mongodb" you need to deal with (I am using OSX):
1. The driver used in NodeJS: That is: var mongo = require('/usr/local/lib/node_modules/mongodb'). Or, you may use "npm link" as mentioned by earlier post in order to avoid the long path. Command "npm install -g mongodb" installs the mongodb driver under /usr/local/lib (this is what "-g" means). This guy took hours and hours to install, don't know why, so be patient!
3. The mongodb database pointed by /data/db. So under /data, I created a symbolic link, db, pointing to /Users/your_user_id/Database/mongodb (or anywhere you like to put it), in which mongodb is an empty directory you may create via mkdir.
Я читал, как TypeScript разрешение модуля строительство.
у меня есть следующие репозитории: ts-di. После компиляции структура каталогов выглядит следующим образом:
в моем пакете.json я написал "main": "dist/index.js" .
В Узел.js все работает нормально, но TypeScript:
не удалось найти файл объявления для модуля "ts-di". '/path / to / node_modules/ts-di/dist / index.js 'неявно имеет 'any' тип.
и все же, если я импортирую следующим образом, то все работает:
что я делаю не так?
еще два способа, когда модуль не твое - просто попробуйте установить его из @types :
или, если ошибка установки-попробуйте переписать import to require :
это чувство, когда вы смотрите в течение двух дней и найти его так: просто удалить .js С "main": "dist/index.js" на package.json и все работает отлично!
UPD: этот ответ относительный, если у вас есть собственный пакет npm, если нет-см. мой ответ ниже.
и если выше ответ не разрешен импорт модуля, попробуйте просто добавить typings на package.json :
конечно, здесь папка dist - это где магазины файлы вашего модуля.
если вы импортируете сторонний модуль 'foo' это не предоставляет никаких типизаций, ни в самой библиотеке, ни в @types/foo пакет (генерируется из DefinitelyTyped repository), то вы можете сделать эту ошибку уйти, объявив модуль в :
тогда при импорте foo он будет просто набран как any .
в качестве альтернативы, если вы хотите свернуть свои собственные типы, вы можете сделать это, тоже:
тогда это будет компилироваться правильно:
вам не нужно предоставлять полные типы для модуля, достаточно для битов, которые вы фактически используете (и хотите правильные типы для), поэтому это особенно легко сделать, если вы используете довольно небольшое количество API.
С другой стороны, если вы не заботитесь о типизациях внешних библиотек и хотите, чтобы все библиотеки без типизаций импортировались как any , вы можете добавить это :
преимущество (и недостаток) этого заключается в том, что вы можете импортировать абсолютно все, и TS будет компилироваться.
TypeScript в основном реализует правила и добавляет типы в ваш код, чтобы сделать его более ясным и точным из-за отсутствия ограничений в Javascript. TypeScript требует от вас описания ваших данных, чтобы компилятор мог проверить ваш код и найти ошибки. Компилятор даст вам знать, если вы используете несоответствующие типы, если вы находитесь вне своей области или пытаетесь вернуть другой тип. Поэтому, когда вы используете внешние библиотеки и модули с TypeScript, они должны содержат файлы, описывающие типы в этом коде. Эти файлы называются объявление типа файлы с пристройкой d.ts . Большинство типов объявлений для модулей npm уже написаны, и вы можете включить их с помощью npm install @types/module_name (где module_name-имя модуля, типы которого вы хотите включить).
тем не менее, есть модули, которые не имеют своих определений типов и для того, чтобы сделать ошибку уйти и импортировать модуль с помощью import * as module_name from 'module-name' создать папка typings в корне вашего проекта, внутри создать новую папку с именем модуля и в этой папке создать и писать declare module 'module_name' . После этого просто зайдите в свой tsconfig.json файл и добавить "typeRoots": [ "../../typings", "../../node_modules/@types"] на compilerOptions (С правильным относительным путем к вашим папкам), чтобы TypeScript знал, где он может найти определения типов ваших библиотек и модулей и добавить новое свойство "exclude": ["../../node_modules", "../../typings"] в файл. Вот пример того, как ваш tsconfig.файл json должен выглядеть например:
сделав это, ошибка исчезнет, и вы сможете придерживаться последних правил ES6 и TypeScript.
получаемая ошибка указывает на то, что пакет NPM для MongoDB установлен неправильно.
исправление здесь зависит от того, как вы планируете использовать NPM. Диспетчер пакетов NPM работает в двух различных режимах: локальном и глобальном.
первый (по умолчанию) режим "местный".
если вы идете в папку с server.js вы увидите подпапку с именем node_modules . Под этой папкой будет . Если этой папки нет, тогда mongodb модуль не установлен на этом пути.
вы также можете установить пакет MongoDB глобально, используя npm install -g mongodb . Это полезно, если вы используете много узлов.JS командной строки, но менее полезно,если вы развертываете все это.
Примечание: есть развивающийся стандарт вокруг package.json . The package.json является стандартизированным способом включения всех зависимостей для данного модуля. Это позволяет запускать npm update или npm install в корне проекта / пакета и эффективно "втянуть" все зависимости. Это значительно упрощает процесс развертывания и процесс сохранения зависимостей в режиме онлайн.
после попытки в течение некоторого времени установить его без успеха (так как я новичок в mongo и node), мне действительно не хватало шага npm link. Итак, я сделал это:
- npm установить mongodb-g
- cd / path/to/my/app / folder
- npm link mongodb
с этим на месте, я мог бы сделать это в моем файле приложения: require ('mongodb').
вот некоторые ссылки, в случае, если вам нужно они:
эта проблема была бы вызвана одной из приведенных ниже причин.
1)Вы не установили модуль mongodb.
2) Вы установили MongoDB в глобальном контексте, но не связаны с текущим приложением.
решение
1) Перейдите в верхний каталог приложения и выполните npm установить mongodb, это установит модуль mongodb, и ваш проект автоматически обнаружит он.
или
2) Выполнить npm установить mongodb-g чтобы установить модуль mongo DB глобально, а затем Ttaverse в верхний каталог приложения и ссылку с помощью команды npm link mongodb.
Полезные Ссылки
вы можете сделать любую из двух вещей, чтобы заставить его работать: -
1) установить mongodb глобально с нижеследующими шагами : -
a) npm install mongodb -g
b) перейдите в каталог приложений, где модуль.js находится, а затем запустите
npm link mongodb
объяснение: - Когда вы устанавливаете пакет глобально через npm, он загружается в глобальную папку node_module. Для меня (пользователь Mac), это под / usr/local/lib/node_modules / mongodb. Мы ссылку это в тот каталог, из которого вы пытаетесь запустить модуль.js.
2) другой подход-установить mongodb локально, а не глобально via
npm install mongodb
после выполнения любого из них вы увидите папку node_modules --> mongodb под модулем.каталог js, что означает, что mongodb был успешно установлен.
Я новичок в MongoDB. Потратив часы на установку mongodb через npm, я, наконец, получил картину. Смотрите, на самом деле есть три "mongodb", с которыми вам нужно иметь дело (я использую OSX):
1. Драйвер, используемый в NodeJS: То есть: var mongo = require('/usr/local/lib/node_modules/mongodb'). Или вы можете использовать "npm link", как упоминалось ранее, чтобы избежать длинного пути. Команда "npm install-g mongodb" устанавливает драйвер mongodb под /usr / local / lib (это то, что "г" означает). Этот парень потратил часы и часы, чтобы установить, не знаю почему, так что будьте терпеливы!
3. База данных mongodb, на которую указывает /data / db. Поэтому в разделе /data я создал символическую ссылку db, указывающую на /Users/your_user_id/Database / mongodb (или где угодно), в которой mongodb-это пустой каталог, который вы можете создать через mkdir.
У меня такая же проблема и я решаю эти шаги.
1.Перейти к вашему проекту реж.(cd ваш путь проекта)
2.Выполните эту команду в командной консоли (install npm)
3.Запустите проект (приложение node.js, например)
может быть вы пытаетесь запустить другой путь проекта.Я столкнулся с той же проблемой и получил решение, выполнив несколько шагов, приведенных ниже.
1.) Перейдите в каталог проекта с помощью command shell "путь cd /project".
2.) Теперь запустите свой проект.
моя проблема была в том, что когда я изначально создал свой пакет.JSON-файл, я сделал ключ "version "соответствующим значению"1.0.0". Когда я изменил это на значение версии, чтобы отразить версию, которую я хотел использовать под моим ключом "зависимости", я избавился от ошибки. Ниже приведена картина потенциального исправления. Обратите внимание, как совпадают" версия "и" mongodb "в разделе" зависимости".
решить
npm установить mongodb
изменить пакет.json = "mongodb": "^3.0.1", изменить "mongodb": "3.0.1",
Я пытаюсь загрузить mongodb, и я следую инструкциям по этому ссылке.
но когда я дохожу до шага:
Я получаю следующую ошибку:
почему это происходит и есть ли обойти?
сначала попробуйте с этой командой:
если вышеуказанная команда не работает, то вы можете устранить проблему с помощью одной из следующих процедур:
надеюсь, что это сработает и для вас. Вы можете следить за этим MongoDB
обновление Вышеуказанная инструкция установит mongodb 2.6 версия, если вы хотите установить последнюю версию для Uubuntu 12.04 тогда просто замените выше step 2 и следуйте инструкциям ниже вместо этого:
если вы используете Ubuntu 14.04 затем используйте шаг ниже вместо выше step 2
истинная проблема здесь может быть, если у вас есть 32-бит система. MongoDB 3.X никогда не использовался в 32-битной системе, поэтому репосторы для 32-бит пусты (поэтому он не найден). Установки по умолчанию 2.Пакет X Ubuntu может быть вашим лучшим выбором с:
Еще один обходной путь, если вы все же хотите получить последнюю версию Mongo:
вы можете перейти к https://www.mongodb.org/downloads и использовать выпадающий список, чтобы выбрать "Linux 32-bit legacy"
но он поставляется с тяжелой ограничения.
этот 32-разрядный устаревший дистрибутив не включает шифрование SSL и ограничено примерно 2 ГБ данных. В общем, вы должны использовать 64-разрядную опирающийся. См.здесь для получения дополнительной информации.
попробуйте без '- org':
работал на меня!
Я запускаю Ubuntu 14.04; и apt все еще не смог найти пакет; я попробовал все ответы выше и больше. URL, который работал для меня, таков:
все шаги верны просто измените Шаг 4, как показано ниже
- Шаг 4: Установите последнюю стабильную версию MongoDB и все необходимые пакеты в нашей системе
это сработало для меня.
если вы используете MongoDB 3.3 Репозиторий (как официально предлагается на сайте MongoDB) вы должны принять во внимание, что имя пакета, используемое для версии 3.3:
тогда правильной командой установки для этой версии будет:
учитывая это, Я скорее предложу использовать текущую последнюю стабильную версию (В3.2) до "В3".3 становится стабильным, команды для установки перечисленных ниже:
скачать v3.2 ключ репозитория:
если вы работаете с Ubuntu 12.04 или Минт 13 добавить следующий репозиторий:
если вы работаете с Ubuntu 14.04 или Минт 17 добавить следующий репозиторий:
если вы работаете с Ubuntu 16.04 или Мята 18 добавить следующий репозиторий:
обновите список пакетов и установите mongo:
принятый в настоящее время ответ работает, но установит устаревшую версию Mongo.
в документации Mongo говорится, что: MongoDB предоставляет только пакеты для Ubuntu 12.04 LTS (Precise Pangolin) и 14.04 LTS (Trusty Tahr). Однако эти пакеты могут работать с другими выпусками Ubuntu.
Итак, чтобы получить последний стабильный Монго ( 3.0 ), использовать это (другой шаг второй):
надеюсь, что это помогает.
I хотелось бы добавить, что в качестве предыдущего шага вы должны проверить выпуск дистрибутива GNU/Linux, который построит url-адрес списка РЕПО. Для меня, как я использую это:
оригинал 2-й шаг:
не работает как и предполагалось, потому что он создал неправильный url-адрес РЕПО. В принципе, он поставил кодовое имя дистрибутива "Рафаэла" в репо url, которое не существует. Вы можете проверить url-адрес РЕПО в диспетчере пакетов в разделе программное обеспечение Источники, Дополнительные Хранилища.
что я сделал, чтобы просмотреть сайт:
и я узнал, что для Ubuntu "надежный" и "точный" - единственные доступные веб-папки, а не "Рафаэла".
решение: Откройте как root файл ' mongodb-org-3.1.список " или " mongodb.перечислите " и замените "rafaela" или вашу версию релиза на соответствующую версию (для меня это было: "trusty"), сохраните изменения и выполните следующие действия. Кроме того, ваш менеджер пакетов может позволить вам легко изменить url-адрес РЕПО.
2 ответа
Вот пример того, как использовать модуль mongodb для подключения к экземпляру mongo в node.js
MongoDB - это программное обеспечение для баз данных ; похоже на то, как MySQL является программным обеспечением. Часто ваши взаимодействия со слоем базы данных управляются какой-то абстрактной библиотекой - в данном случае, модулем узла mongoose .
Похоже, у вас есть require('mongodb') , когда вы должны иметь require('mongoose') . В результате появится модуль Mongoose , который по сути является библиотекой кода для взаимодействия с вашей базой данных MongoDB .
Похоже, вы немного запутались в терминологии. Если у вас есть какие-либо вопросы, не стесняйтесь меня ударить :)
Do you have a package.json in the root of your project directory? Does it have 'mongodb' listed as a dependency? Did you remember to npm install ? That error says node couldn't find the 'mongodb' JavaScript package, not the mongodb server on the machine.
Читайте также: