Тернарный оператор не ведет себя так, как задумано - PullRequest
0 голосов
/ 02 января 2019

мой код ссылки

в строке currentEnvironment = typeof (process.env.NODE_ENV === 'string') ? currentEnvironment.toLowerCase() : '';

когда я передаю ввод ? uptime-monitoring-app >> NODE_ENV=production node app.js, он работает без каких-либо проблем.

Command Line arguments :
0: /usr/local/Cellar/node@10/10.15.0/bin/node
1: /Users/tentacion/Documents/CODE/Node without NPM/uptime-monitoring-app/app.js
string

Server Started @ 5000           Environment : production
--------------------------------------------------------------------------------------------------

НО для ввода uptime-monitoring-app >> Nnode app.js выдает ошибку, потому что теперь переменная NODE_ENV не определена.

Command Line arguments :
0: /usr/local/Cellar/node@10/10.15.0/bin/node
1: /Users/tentacion/Documents/CODE/Node without NPM/uptime-monitoring-app/app.js
undefined
/Users/tentacion/Documents/CODE/Node without NPM/uptime-monitoring-app/envConfig.js:66
currentEnvironment = typeof (process.env.NODE_ENV === 'string') ? currentEnvironment.toLowerCase() : '';
                                                                                     ^

TypeError: Cannot read property 'toLowerCase' of undefined
    at Object.<anonymous> (/Users/tentacion/Documents/CODE/Node without NPM/uptime-monitoring-app/envConfig.js:66:86)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/Users/tentacion/Documents/CODE/Node without NPM/uptime-monitoring-app/app.js:11:19)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
?  uptime-monitoring-app >>

Что я ожидал, если переменная NODE_ENV не определена, тогдавыражение typeof (process.env.NODE_ENV === 'string') будет ложным, поэтому следует выполнить следующий оператор.т.е. присваивая его пустой строкой.

Пожалуйста, помогите, я не знаю, что я делаю неправильно.Я новичок в узле

1 Ответ

0 голосов
/ 02 января 2019

process.env.XXX всегда являются либо строкой, либо неопределенной.

Предпочитают что-то вроде const { XXX = 'some-default-value' } = process.env, которое называется деструктуризацией объекта, которое будет либо использовать предоставленное значение для XXX, либо присвоить ему значение по умолчанию, если ононе определено.

...