staffID
@staffID

Область видимости nodejs?

Создал файл mysql.js,
туда поместил модуль mysql:
var mysql = require( 'mysql' );
После создал файл config.js
Подключил его после, того как подключил модуль.
В файле config.js
Прописал connect к базе и получил ошибку mysql undefined,
как так?
Чтобы все работало, я подключил mysql уже в файле config.js
Connect я объявил переменной db.
А после чего вызвал это все в файле server.js, и опять db не определено.
То есть: файл server.js
var mysql = require( 'mysql' );
require( './config' );
db.query( 'SELECT * FROM name', function( error, result, fields ) {
} );

//error db - undefined

Но db определена в config.js
  • Вопрос задан
  • 1797 просмотров
Решения вопроса 2
@sergeystepanov1988
Все файлы подключаемые через require имеют свою область видимости.
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Любые модули в js сделаны на замыканиях, поэтому и не видят переменные и функции друг друга
Главная задача, которую решают модули - как раз таки разграничение области видимости.

В node.js встроена модульная система CommonJS, вот ее основы:
1) Модули подключаются синхронно и отрабатывают 1 раз за время жизни приложения, после результат кэшируется
2) В качестве результата работы модуля используется значение module.exports, которое модуль может изменять
3) Если присвоить в module.exports новое значение, после того как модуль отработал - это никак не отразится на внешних подключениях модуля, однако если module.exports объект, можно менять поля этого объекта
4) По умолчанию module.exports содержит новый пустой объект, ссылка на этот объект содержится так же в переменной exports
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
maxfarseer
@maxfarseer
https://maxpfrontend.ru, обучаю реакту и компании
Так у вас переменная db здесь не определена.
То есть, если в config.js, например {param1: 'qweqwe', param2: 'ababaa'}, то в server.js должно быть
var params = require('./config')
либо
var param1 = require('./config').param1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы