Как я могу получить доступ к объектам внутри объектов непосредственно в Node.js? - PullRequest
0 голосов
/ 04 октября 2019

Допустим, у меня есть два файла с именами dbPerson.js и dbCar.js, оба со своими собственными методами, такими как:

dbPerson.js:

module.exports = {
    getAll(callback){}
}

dbCar.js:

module.exports = {
    getOne(callback){}
}

А затем у меня есть другой файл с именем db.js, который импортирует эти файлы:

const dbPerson=require('./dbPerson');
const dbCar=require('./dbCar');

И в конечном итоге у меня есть основнойфайл, который импортирует db.js:

const db=require('./db');

Я хочу иметь возможность вызывать методы, используя db.getAll() и db.getOne(), но таким образом мне нужно будет использовать db.dbPerson.getAll() и db.dbCar.getOne(), есть ли способ, чтобы мне не нужно было это делать?

ОБНОВЛЕНИЕ: Я обнаружил, что ответ ниже помогает мне, но спасибо всем, кто пытался понять, что я имел в виду, затемраз я попытаюсь быть более ясным!

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Есть несколько способов сделать это. Какой путь вы выберете, зависит от ваших требований.

Сначала давайте предположим, что вы хотите объединить эти два объекта (dbCar и dbPerson). Затем вы можете сделать это, просто используя синтаксис распространения объекта.

// db.js
module.exports = {
  ...dbPerson,
  ...dbCar,
}

Обратите внимание, что при этом конфликтующие свойства dbPerson будут переопределены свойствами dbCar. И с помощью наименования не имеет смысла объединять эти два объекта (что бы вы назвали чем-то, что является человеком, а также автомобилем?).

Другой подход заключается в использовании прокси-объекта для переадресации вызовов. .

// db.js
module.exports = {
  getAll: dbPerson.getAll,
  getOne: dbCar.getOne,
}
1 голос
/ 04 октября 2019

Вам также необходимо экспортировать эти функции из файла db.js:

//db.js
const dbPerson=require('./dbPerson');
const dbCar=require('./dbCar');

module.exports = {
    getAll: dbPerson.getAll, 
    getOne: dbCar.getOne
}

Вы говорите:

Я хочу иметь возможность вызывать методы с помощьюиспользуя db.getAll () и db.getOne (), но таким образом мне нужно будет использовать db.dbPerson.getAll () и db.dbCar.getOne (), есть ли способ, поэтому мне не нужно это делать?

Есть ли причина, по которой это может быть проблемой?

Насколько я понимаю, вы говорите о двух разных вещах , машинах и людях.

Выполнение db.dbCar.getOne() имеет для меня смысл, если бы я сделал db.getOne(), я не был бы уверен, получу ли я одну машину или одного человека.

Вы можете просто переименовать методы в вашем экспорте, например:

module.exports {
    getAllPersons: dbPerson.getAll, 
    getOneCar: dbCar.getOne, 
}
...