#javascript #node.js
#javascript #node.js
Вопрос:
Вопрос для начинающих
Выполняется на стороне сервера, в node.js:
Если я использую переменную области видимости файла (или даже глобальную), которая задается export.function(), где эта экспортируемая функция вызывается через ajax от клиента, если поступает несколько запросов от разных клиентов, подвержена ли переменная неожиданным результатам?
Т. е. нужно ли мне настраивать массив, чтобы при каждом вызове export.function() он добавлял новый экземпляр области видимости файла для этого конкретного запроса ajax? Или это волшебным образом обрабатывается node.js где каждый запрос ajax получает свой собственный экземпляр сервера?
Ответ №1:
Запросы будут совместно использовать одни и те же экземпляры, поэтому вам нужно будет остерегаться этого. Обратите внимание, однако, что блоки синхронного кода будут выполнены полностью до того, как выполнение переключится на обработку другого запроса, так что это упрощает «защиту», которую вам нужно выполнить.
Комментарии:
1. Спасибо! Я использую эти глобальные переменные в асинхронных сообщениях / ответах, поэтому похоже, что это нужно будет решить.
2. итак, чтобы уточнить, кажется, что стандартный способ исправить это — добавить глобальные значения в запрос. Например: exports.server_route(req, res ) { req.globals={ g1:0, g2:»init», g3:0 }; somefuncwithpassedcallback( функция ( req, res ) { // доступ к глобальным файлам через req.globals.g1 и т.д. } ); } функция somefuncwithpassedcallback(обратный вызов ) { обратный вызов (req, res ); } и затем ВСЕГДА вызывать все, включая запрос и res в списке аргументов (запрос для доступа к запросу и добавленным глобальным данным и запрос для генерации ответа в случае сбоев или обычного ответа, вложенного в некоторый обратный вызов).