Mongoose GPS Tracking 4G
Приложение Mongoose упрощает отслеживание вашего автомобиля, грузовика, фургона, внедорожника, дома на колесах, прицепа. На самом деле вы можете отслеживать почти все, что движется.
Посетите наши веб-сайты, чтобы ознакомиться с ассортиментом трекеров и других замечательных продуктов Mongoose.
АВСТРАЛИЯ www.mongoose.com.au
Новая Зеландия www.mongoose.co.nz
Последнее обновление
2 нояб. 2022 г.
Инструменты
Безопасность данных
arrow_forward
Чтобы контролировать безопасность, нужно знать, как разработчики собирают ваши данные и передают их третьим лицам. Методы обеспечения безопасности и конфиденциальности могут зависеть от того, как вы используете приложение, а также от вашего региона и возраста. Информация ниже предоставлена разработчиком и в будущем может измениться.
Источник: play.google.com
Оглавление на сайте: MongoDB Aggregation (Mongoose). Сортировка без учета регистра.
Mongoose с Node.js — моделирование объектных данных
NoSQL привнес гибкость в табличный мир баз данных. В частности, MongoDB стал отличным вариантом для хранения неструктурированных документов JSON. Данные начинаются как JSON в пользовательском интерфейсе и претерпевают очень мало преобразований для сохранения, поэтому мы получаем преимущества от повышения производительности и сокращения времени обработки.
Но NoSQL не означает полного отсутствия структуры. Нам все еще нужно проверить и преобразовать наши данные перед их сохранением, и нам все еще может потребоваться применить к ним некоторую бизнес-логику. Это место, которое заполняет Mongoose.
В этой статье мы узнаем на примере приложения, как мы можем использовать Mongoose для моделирования наших данных и проверки их перед сохранением в MongoDB.
Мы напишем модель для приложения «Генеалогия» — человека с несколькими личными свойствами, включая их родителей. Мы также увидим, как мы можем использовать эту модель для создания и изменения лиц и сохранения их в MongoDB.
Что такое Mongoose?
Как работает MongoDB
Чтобы понять, что такое Mongoose, нам сначала нужно понять в общих чертах, как работает MongoDB. Базовая единица данных, которую мы можем сохранить в MongoDB, — это документ. Несмотря на то, что они хранятся как двоичные, когда мы запрашиваем базу данных, мы получаем ее представление в виде объекта JSON.
Связанные документы могут храниться в коллекциях, подобных таблицам в реляционных базах данных. На этом аналогия заканчивается, поскольку мы определяем, что считать «связанными документами».
MongoDB не навязывает структуру документов. Например, мы можем сохранить этот документ в коллекцию Person :
А затем в той же коллекции мы могли бы сохранить, казалось бы, несвязанный документ без общих свойств или структуры:
В этом заключается новизна баз данных NoSQL. Мы придаем смысл нашим данным и храним их так, как нам кажется лучше. База данных не налагает никаких ограничений.
Создаём модель для пользователя / Основы Mongoose
Цель Mongoose
Хотя MongoDB не навязывает структуру, приложения обычно управляют данными с ее помощью. Мы получаем данные, и нам необходимо их проверить, чтобы убедиться, что мы получили именно то, что нам нужно. Нам также может потребоваться обработать данные каким-либо образом перед их сохранением. Здесь и вступает в игру Mongoose.
Mongoose — это NPM пакет для приложений NodeJS. Он позволяет определять схемы для наших данных, а также абстрагироваться от доступа к MongoDB. Таким образом мы можем гарантировать, что все сохраненные документы имеют общую структуру и содержат необходимые свойства.
Давайте теперь посмотрим, как определить схему.
Установка Mongoose и создание схемы Person
Давайте запустим проект Node со свойствами по умолчанию и схемой Person:
npm init -y
После инициализации проекта давайте продолжим и установим mongoose , используя npm :
npm install —save mongoose
mongoose также автоматически установит NPM модуль mongodb . Вы не будете использовать его напрямую. Этим займется Mongoose.
Чтобы работать с Mongoose, нам нужно импортировать его в наши скрипты:
let mongoose = require(‘mongoose’);
А затем подключитесь к базе данных с помощью:
mongoose.connect(‘mongodb://localhost:27017/genealogy’, );
Поскольку база данных еще не существует, она будет создана. Мы будем использовать последний инструмент для анализа строки подключения, установив значение useNewUrlParser как true а также будем использовать последнюю версию драйвера MongoDB с useUnifiedTopology равным true .
mongoose.connect() предполагает, что сервер MongoDB работает локально на порту по умолчанию и без учетных данных. Один из простых способов заставить MongoDB работать таким образом — это Docker:
docker run -p 27017:27017 mongo
Созданного контейнера нам будет достаточно, чтобы попробовать Mongoose, хотя данные, сохраненные в MongoDB, не будут постоянными.
Схема и модель Person
После предыдущих необходимых объяснений мы можем сосредоточиться на написании нашей схемы человека и компиляции из нее модели.
Схема в Mongoose сопоставляется с коллекцией MongoDB и определяет формат для всех документов в этой коллекции. Всем свойствам внутри схемы должен быть назначен SchemaType . Например, имя нашего Person можно определить так:
const PersonSchema = new mongoose.Schema(< name: < type: String>, >);
Или еще проще, вот так:
const PersonSchema = new mongoose.Schema(< name: String, >);
String является одним из нескольких SchemaTypes , определенных Mongoose. Остальное можно найти в документации Mongoose.
Ссылка на другие схемы
Мы можем ожидать, что все приложения среднего размера будут иметь более одной схемы, и, возможно, эти схемы будут каким-то образом связаны.
В нашем примере, чтобы представить генеалогическое древо, нам нужно добавить в нашу схему два атрибута:
const PersonSchema = new mongoose.Schema(< // . mother: < type: mongoose.Schema.Types.ObjectId, ref: ‘Person’ >, father: < type: mongoose.Schema.Types.ObjectId, ref: ‘Person’ >, >);
Человек может иметь mother и father . В Mongoose это можно представить, сохранив идентификатор документа, на который есть ссылка mongoose.Schema.Types.ObjectId , а не самого объекта.
ref должно быть название модели, на которую мы ссылаемся. Позже мы узнаем больше о моделях, но пока достаточно знать, что схема относится только к одной модели и Person является моделью PersonSchema .
Наш случай немного особенный, потому что оба mother и father также будут содержать людей, но способ определения этих отношений одинаков во всех случаях.
Встроенная проверка
Все SchemaType идут со встроенной проверкой по умолчанию. В зависимости от выбранного мы можем определить лимиты и другие требования SchemaType . Для того, чтобы увидеть некоторые примеры, давайте добавим surname , yearBorn и notes к нашему Person :
const PersonSchema = new mongoose.Schema(< name: < type: String, index: true, required: true >, surname: < type: String, index: true >, yearBorn: < type: Number, min: -5000, max: (new Date).getFullYear() >, notes: < type: String, minlength: 5 >, >);
Все встроенные SchemaType могут быть required . В нашем случае мы хотим, чтобы у всех людей было хотя бы имя. Тип Number позволяет устанавливать мин и максимальными значениями.
Свойство index заставит Mongoose создать индекс в базе данных. Это облегчает эффективное выполнение запросов. Выше мы определили индексы name и surname . Мы всегда будем искать людей по именам.
Пользовательская проверка
Встроенные SchemaType позволяют настраивать собственные проверки. Это особенно полезно, когда у нас есть свойство, которое может содержать только определенные значения. Добавим свойство photosURLs в наш массив URL-адресов их фотографий Person :
const PersonSchema = new mongoose.Schema(< // . photosURLs: [ < type: String, validate: < validator: function(value) < const urlPattern = /(http|https)://(w+:w*#)?(S+)(:[0-9]+)?(/|/([w#. += const urlRegExp = new RegExp(urlPattern); return value.match(urlRegExp); >, message: props => `$ is not a valid URL` > > ], >);
photosURLs это просто массив строк photosURLs: [String] . Что делает это свойство особенным, так это то, что нам нужна настраиваемая проверка, чтобы подтвердить, что добавленные значения имеют формат URL-адреса.
В приведенной выше функции validator() используется регулярное выражение, которое соответствует типичным URL-адресам в Интернете, которые должны начинаться с http(s):// .
Если нам нужен более сложный SchemaType , мы можем создать свой собственный, но нам стоит поискать, возможно он уже существует.
Например, пакет mongoose-type-url, который мы могли бы использовать вместо нашей валидации.
Виртуальные свойства
Виртуальные объекты — это свойства документа, которые не сохраняются в базе данных. Они результат расчета. В нашем примере было бы полезно задать полное имя человека в одной строке, а не разделять name и surname .
Посмотрим, как этого добиться после определения нашей первоначальной схемы:
PersonSchema.virtual(‘fullName’). get(function() < if(this.surname) return this.name + ‘ ‘ + this.surname; return this.name; >). set(function(fullName) < fullName = fullName.split(‘ ‘); this.name = fullName[0]; this.surname = fullName[1]; >);
Приведенное выше виртуальное свойство fullName делает некоторые предположения для простоты: у каждого человека есть как минимум имя и фамилия. Мы столкнемся с проблемами, если у человека есть отчество, составное имя или фамилия. Все эти ограничения могут быть закреплены внутри get() и set() функции, определенные выше.
Поскольку виртуальные данные не сохраняются в базе данных, мы не можем использовать их в качестве фильтра при поиске людей в базе данных. В нашем случае нам нужно будет использовать name и surname .
ПО промежуточного слоя
Промежуточное ПО — это функции или перехватчики, которые могут выполняться до или после стандартных методов Mongoose, например, таких как save() или find() .
Человек может иметь mother и father . Как мы уже говорили ранее, мы сохраняем эти отношения, сохраняя идентификатор объекта как свойства человека, а не сами объекты. Было бы неплохо заполнить оба свойства самими объектами, а не только идентификаторами.
Это может быть достигнуто как функция pre() , связанная с методом Mongoose findOne() :
PersonSchema.pre(‘findOne’, function(next) < this.populate(‘mother’).populate(‘father’); next(); >);
Вышеупомянутой функции необходимо вызвать функцию next() , полученную в качестве параметра, чтобы продолжить обработку других хуков.
populate() — это метод Mongoose для замены идентификаторов объектами, которые они представляют, и мы используем его для получения родителей при поиске только одного человека.
Мы могли бы добавить этот хук к другим функциям поиска, например find() . Мы могли бы даже найти родителей рекурсивно, если бы захотели. Но мы должны обращаться с populate() осторожно, так как каждый вызов — это выборка из базы данных.
Создайте модель для схемы
Чтобы начать создавать документы на основе нашей схемы Person, последний шаг — это скомпилировать модель на основе схемы:
const Person = mongoose.model(‘Person’, PersonSchema);
Первым аргументом будет единственное имя коллекции, о которой мы говорим. Это значение ref , которое мы придали свойствам mother и father . Второй аргумент — это Schema, то что мы определили ранее.
Метод model() делает копию всего что мы определили в схеме. Он также содержит все методы Mongoose, которые мы будем использовать для взаимодействия с базой данных.
Модель — это единственное, что нам теперь нужно. Мы могли бы даже использовать module.exports , чтобы сделать Person доступным в других модулях нашего приложения:
module.exports.Person = mongoose.model(‘Person’, PersonSchema); module.exports.db = mongoose;
Мы также экспортировали модуль mongoose . Он понадобится нам для отключения от базы данных до завершения работы приложения.
Мы можем импортировать модуль таким образом:
const = require(‘./persistence’);
Как использовать модель
Модель, которую мы скомпилировали в последнем разделе, содержит все, что нам нужно для взаимодействия с коллекцией в базе данных.
Давайте теперь посмотрим, как мы будем использовать нашу модель для всех операций CRUD.
Создание Person
Мы можем создать Person, просто выполнив:
let alice = new Person();
name это единственное обязательное свойство. Давайте создадим другого человека, но на этот раз с использованием виртуального свойства:
let bob = new Person();
Теперь, когда у нас есть первые два человека, мы можем создать нового со всеми заполненными свойствами, включая родителей:
let charles = new Person(< fullName: ‘Charles Brown’, photosURLs: [‘https://bit.ly/34Kvbsh’], yearBorn: 1922, notes: ‘Famous blues singer and pianist. Parents not real.’, mother: alice._id, father: bob._id, >);
Все значения для этого последнего человека установлены на допустимые, так как проверка выдаст ошибку, как только эта строка будет выполнена. Например, если бы мы установили URL-адрес первой фотографии не на ссылку, мы бы получили ошибку:
ValidationError: Person validation failed: photosURLs.0: wrong_url is not a valid URL
Как объяснялось ранее, родители были заполнены идентификаторами первых двух человек, а не объектами.
Мы создали трех человек, но они еще не сохранены в базе данных. Сделаем это дальше:
alice.save(); bob.save();
Операции с базой данных асинхронны. Если мы хотим дождаться завершения, мы можем использовать async / await:
await charles.save();
Теперь, когда все люди будут сохранены в базе данных, мы можем получить их обратно с методами find() и findOne() .
Получить одно или несколько Person
Все методы поиска в Mongoose требуют аргумента для фильтрации поиска. Вернемся к последнему созданному нами человеку:
let dbCharles = await Person.findOne().exec();
findOne() возвращает запрос, поэтому для получения результата нам нужно выполнить его с помощью exec() , а затем дождаться результата с помощью await .
Поскольку мы прикрепили к методу findOne() ловушку для заполнения родителей человека, теперь мы можем обращаться к ним напрямую:
console.log(dbCharles.mother.fullName);
В нашем случае мы знаем, что запрос вернет только один результат, но даже если более одного человека соответствует фильтру, будет возвращен только первый результат.
Мы можем получить более одного результата, если воспользуемся методом find() :
let all = await Person.find(<>).exec();
Мы вернем массив, который сможем перебрать.
Обновление Person
Если у нас уже есть Person, так как мы только что его создали или извлекли, мы можем обновить и сохранить изменения, выполнив следующие действия:
alice.surname = ‘Adams’; charles.photosURLs.push(‘https://bit.ly/2QJCnMV’); await alice.save(); await charles.save();
Поскольку оба человека уже существуют в базе данных, Mongoose отправит команду обновления только с измененными полями, а не со всем документом.
Удалить Person
Как и поиск, удаление может быть выполнено для одного или нескольких Person:
await Person.deleteOne(); await Person.deleteMany(<>).exec();
После выполнения этих двух команд коллекция будет пустой.
Вывод
В этой статье мы увидели, как Mongoose может быть очень полезен в наших проектах NodeJS и MongoDB.
В большинстве проектов с MongoDB нам необходимо хранить данные в определенном формате. Приятно знать, что Mongoose предоставляет простой способ моделирования и проверки этих данных.
Источник:
Источник: dev-gang.ru
Клон MongoosePro® JLR и русификация Toyota Techstream
Заказал себе недавно клон адаптера MongoosePro для работы с программой Toyota Techstream. Поначалу искал оригинал от DrewTech, но цена уж больно кусачая для моих целей — около 500$. А клоны стоят на порядок дешевле, да и работают по отзывам ничуть не хуже.
Клоны бывают двух цветов — синие (позиционируются, как MFC для Toyota) и красные (позиционируются, как JLR для Jaguar и Land Rover). Хотя в реале никакой разницы между ними нет, прошивка и электроника у них универсальные и любой цвет работает с любой маркой автомобилей, т.к. все они поддерживают нужный нам протокол J2534 Pass-Thru.
К сожалению, на али я не нашёл синий клон MFC и потому заказал красный JLR. При этом крайне желательно найти версию клона JLR не ниже 160, т.к. она наилучшим образом поддерживает работу с Techstream. При этом сама программа Techstream до сих пор выпускается 32-битная и сильный ноут ей не нужен, но крайне необходим качественный и быстрый адаптер.
Я сразу акцентирую внимание на качестве работы потому, что пока ждал свой клон Mongoose, то временно пользовался адаптером MiniVCI, взятым у местного тойотовода. Скажу сразу, MiniVCI — дрянь редкая, не берите его себе даже в подарок. Постоянные обрывы связи и вылеты программы, хоть и перепробовал уже все драйвера на двух своих ноутах (с WinXP x32 и Win10 x64). Если кто-то где-то пишет, что MiniVCI у него нормально работает, то ему просто дико повезло. Тойотавод, кстати, тоже плюётся на свой MiniVCI.
Когда мой адаптер приехал, продавец скинул мне ссылку на последние драйвера MongoosePro® JLR, которые находятся на официальном сайте DrewTech. После установки этих драйверов мы подключаем адаптер к ноуту, находим в «Пуск->Программы» программу диагностики адаптера и видим такую картинку:
Программа диагностики с официального сайта DrewTech определила мой клон, как оригинальный(!) адаптер с серийным номером 017427
Получается, китайцы продают на али один и тот же клон уже много лет. Кстати, вот синий адаптер с серийником, идентичным моему, который был куплен ещё в далёком 2014 году -> www.drive2.ru/l/4364897
Теперь ставим саму программу Techstream и я рекомендую ставить не самую последнюю версию, а лучше версию 12.20.024 (дата выпуска 07/2017), которая во-первых, немного русифицирована AutoKent’ом, а во-вторых, проверена временем.
Toyota Techstream 12.20.024 и лекарство с инструкцией + русификатор 12.20.024
После установки, русификации и активации, выбираем наш адаптер: «Настройка» -> «Выбор адаптера VIM» -> «MongoosePro JLR», как на скриншоте ниже.
Полный размер
Русская Северная Америка, они нам ещё за Аляску ответят)
Кстати, заставка у Японии выглядит несколько иначе.
Полный размер
Русская Япония, а не только Сахалин)
Но вернёмся к адаптеру. Сказать, что с адаптером Mongoose программа летает, чем по сравнению с MiniVCI, это значит ничего не сказать. Программа меньше чем за минуту(!) опросила 35 различных блоков машины и вывела их на экран. MiniVCI за пять минут даже половину блоков прочитать не мог, т.к. связь рвалась постоянно, а на последних блоках программа просто вылетала.
Ну и вот ссылка на дилерские параметры кастомизации, которые можно у себя менять. Кстати, тут не машинный (как везде), а нормальный человеческий перевод.
Пользовательские настройки: сканер + Techstream — Customize
Полный размер
Набор ‘Юный диагност’
P.S. Для корректной работы адаптера MongoosePro в WinXP x32 нужно будет заменить файл ptshim32.dll в папке C:Program FilesToyota DiagnosticsTechstreambin. Ссылка на правильный файл -> ptshim32.dll
UPD 06/22: После выхода в начале лета 17-й версии TechStream, я перешёл на неё, и вам рекомендую поступить так же. Хоть в ней и нет русского, но неплохо исправлены алгоритмы работы в утилитах и они стали несколько проще и наглядней. При этом программа так же быстро работает на моём слабеньком нетбуке с WinXP x32.
Вот ссылка на версию 17.10.012 и на ярлыки для запуска диагностического блока программы без ключа.
Полный размер
Запчасти на фото: 520001
Он вам вышлет 4 ключа для активации всех 4 рынков сбыта тойоты (Америка, Европа, Япония и весь остальной мир). Человек он очень хороший и денег за ключи не требует, но можно отблагодарить его любой суммой через Бусти #.
Источник: www.drive2.ru
Введение в Mongoose для MongoDB и Node.js
Mongoose — это инфраструктура JavaScript, которая обычно используется в приложении Node.js с базой данных MongoDB. В этой статье я собираюсь познакомить вас с Mongoose и MongoDB, и, что более важно, там, где эти технологии подходят для вашего приложения.
Что такое MongoDB?
Начнем с MongoDB. MongoDB — это база данных, в которой ваши данные хранятся в виде документов. Чаще всего эти документы напоминают JSON-подобную структуру:
firstName: «Jamie»,
lastName: «Munro»
Документ затем помещается в коллекцию. В качестве примера, приведенный выше пример документа определяет user объект. Этот user объект тогда, как правило, будет частью коллекции, называемой users .
Одним из ключевых факторов с MongoDB является его гибкость, когда речь идет о структуре. Несмотря на то, что в первом примере user объект содержал свойства firstName и lastName , эти свойства не требуются в каждом user документе, который является частью коллекции users . Это то, что отличает MongoDB от базы данных SQL, такой как MySQL или Microsoft SQL Server, которая требует строго определенной схемы базы данных каждого объекта, который она хранит.
Возможность создавать динамические объекты, которые хранятся в виде документов в базе данных, — вот где Mongoose вступает в игру.
Что такое мангуст?
Mongoose является картографом объектных документов (ODM). Это означает, что Mongoose позволяет вам определять объекты со строго типизированной схемой, которая сопоставлена с документом MongoDB.
Mongoose предоставляет невероятное количество функций для создания и работы со схемами. В настоящее время Mongoose содержит восемь типов SchemaType, которые сохраняются для свойства, когда оно сохраняется в MongoDB. Они есть:
- строка
- номер
- Дата
- буфер
- логический
- смешанный
- ObjectId
- массив
Каждый тип данных позволяет вам указать:
- значение по умолчанию
- пользовательская функция проверки
- указать поле, обязательное для заполнения
- функция get, которая позволяет вам манипулировать данными, прежде чем они будут возвращены как объект
- функция set, которая позволяет вам манипулировать данными перед их сохранением в базе данных
- создавать индексы, позволяющие быстрее извлекать данные
В дополнение к этим общим параметрам, определенные типы данных позволяют вам дополнительно настраивать, как данные хранятся и извлекаются из базы данных. Например, тип данных String также позволяет указывать следующие дополнительные параметры:
- преобразовать его в нижний регистр
- преобразовать его в верхний регистр
- обрезать данные перед сохранением
- регулярное выражение, которое может ограничивать данные, которые могут быть сохранены в процессе проверки
- перечисление, которое может определить список допустимых строк
Свойства Number и Date поддерживают указание минимального и максимального значения, допустимого для этого поля.
Большинство из восьми разрешенных типов данных должны быть вам знакомы. Однако есть несколько исключений, которые могут ObjectId вас, например, Buffer , Mixed , ObjectId и Array .
Тип данных Buffer позволяет сохранять двоичные данные. Типичным примером двоичных данных может быть изображение или закодированный файл, такой как документ PDF.
Тип данных Mixed превращает свойство в поле «все идет». Это поле напоминает, сколько разработчиков может использовать MongoDB, потому что нет определенной структуры. Будьте осторожны с использованием этого типа данных, поскольку он теряет многие замечательные функции, которые предоставляет Mongoose, такие как проверка данных и обнаружение изменений сущностей, чтобы автоматически узнавать об обновлении свойства при сохранении.
ObjectId данных ObjectId обычно указывает ссылку на другой документ в вашей базе данных. Например, если у вас есть коллекция книг и авторов, документ книги может содержать свойство ObjectId которое ссылается на конкретного автора документа.
Тип данных Array позволяет хранить JavaScript-подобные массивы. С типом данных Array вы можете выполнять над ними обычные операции с массивами JavaScript, такие как push, pop, shift, slice и т. Д.
Быстрый обзор
Прежде чем перейти к созданию кода, я просто хотел вспомнить то, что мы только что узнали. MongoDB — это база данных, которая позволяет хранить документы с динамической структурой. Эти документы сохраняются в коллекции.
Mongoose — это библиотека JavaScript, которая позволяет вам определять схемы со строго типизированными данными. После того, как схема определена, Mongoose позволяет вам создать Модель на основе определенной схемы. Модель Mongoose затем сопоставляется с документом MongoDB через определение схемы модели.
После того, как вы определили свои схемы и модели, Mongoose содержит множество различных функций, которые позволяют вам проверять, сохранять, удалять и запрашивать ваши данные, используя обычные функции MongoDB. Я поговорю об этом подробнее с конкретными примерами кода для подражания.
Установка MongoDB
Прежде чем мы сможем приступить к созданию наших схем и моделей Mongoose, необходимо установить и настроить MongoDB. Я бы предложил посетить страницу загрузки MongoDB . Есть несколько вариантов, доступных для установки. Я связался с Сервером Сообщества. Это позволяет вам установить версию, специфичную для вашей операционной системы.
MongoDB также предлагает Enterprise Server и установку поддержки облака. Поскольку целые книги могут быть написаны об установке, настройке и мониторинге MongoDB, я собираюсь придерживаться Сервера совместной работы.
После того, как вы скачали и установили MongoDB для выбранной вами операционной системы, вам нужно будет запустить базу данных. Вместо того, чтобы изобретать велосипед, я бы предложил посетить документацию MongoDB по установке MongoDB Community Edition .
Я подожду здесь, пока вы настроите MongoDB. Когда вы будете готовы, мы можем перейти к настройке Mongoose для подключения к вашей только что установленной базе данных MongoDB.
Настройка мангуста
Mongoose — это фреймворк JavaScript, и я собираюсь использовать его в приложении Node.js. Если у вас уже установлен Node.js, вы можете перейти к следующему шагу. Если у вас не установлен Node.js, я предлагаю вам начать со страницы загрузки Node.js. и выбрать установщик для вашей операционной системы.
С настроенным и готовым к работе Node.js я собираюсь создать новое приложение, а затем установить пакет Mongoose NPM.
В командной строке, в которой вы хотите установить приложение, вы можете запустить следующие команды:
Источник: coderlessons.com