MongoRuntimeError Невозможно проанализировать URL-адрес

Я пытаюсь подключиться к базе данных mongo с помощью драйвера mongo nodejs, и я делаю это в проекте кипариса. Я получаю ошибку в заголовке. Ниже приведена упрощенная версия моего кода.

import {MongoClient} from 'mongodb';

export class SomeRepository {

    static insertSomething(): void {
        // Error in the line below: MongoRuntimeError Unable to parse localhost:27017 with URL
        const client = new MongoClient('mongodb://localhost:27017');
    }
}

MongoDB работает, потому что я могу подключиться с терминала. Также попытался заменить localhost на 127.0.0.1 и добавить параметр authSource в строку подключения.

Причина, по которой я упоминаю кипарис, заключается в том, что в простом проекте node, который подключается только к mongodb, все работает так, как ожидалось. Package.json ниже

{
  "name": "e2e",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "dependencies": {
    "cypress": "10.8.0",
    "cypress-wait-until": "1.7.2",
    "headers-utils": "3.0.2",
    "mongodb": "4.10.0",
    "otplib": "12.0.1",
    "pg": "8.7.3",
    "pg-native": "3.0.1",
    "typescript": "4.9.3"
  }
}

Когда вы говорите, что это проект кипариса, вы пытаетесь выполнить этот код в тесте кипариса?

DJSDev 09.12.2022 06:19

Да, это то, что я говорю. В основном у меня есть это: cy.then(() => { SomeRepository.insertSomething(); });

Dani Oprean 10.12.2022 10:54
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
2
371
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ошибка заключается в том, как вы передаете URL-адрес, необходимо, чтобы вы следовали шаблону, в mongodb для подключения вам нужен этот шаблон, который я передам ниже:

Формат:

mongodb://<user>:<password>@<host>

Формат с заполненными значениями:

mongodb://root:mypassword@localhost:27017/

Аутентификация отключена на localhost db.

Dani Oprean 12.12.2022 08:34

Строка подключения не была проблемой. Та же строка подключения отлично работала в консоли

Dani Oprean 20.01.2023 13:15
Ответ принят как подходящий

Причина, по которой это не работает, заключается в том, что вы вызываете библиотеку NodeJS в тесте кипариса. Тесты Cypress запускаются внутри браузера и не могут запускать библиотеки nodejs.

Если вы хотите выполнить код nodejs в кипарисе, вы должны создать задачу кипариса https://docs.cypress.io/api/commands/task#Syntax

// cypress.config.js
import { SomeRepository } from ‘./file/somewhere’

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on(‘task’, {
        insertSomething() {
          return SomeRepository.insertSomething();
        }
      }
    }
  }
})

// to call in a cypress test
it(‘test’, function () {
    cy.task(‘insertSomething’).then(value => /* do something */);
  }
});

Другие вопросы по теме