Имея проблему с новой реликвией в Node.js. Кажется, что это мешает моей реализации продолжения-локального хранилища, и я имею в виду, что это, похоже, убивает мой контекст cls.Новый реликвий, нарушающий контекст продолжения-локального хранения
Итак, теперь все работает без проблем с моей текущей настройкой. Это только когда я добавляю строку require ("newrelic"); наверху app.js, как они рекомендуют, что проблема возникает.
Ниже приведена конкретная функция, в которой возникает проблема.
function getProfile(req, res, next) {
var logger = new log_handler({ "script": __filename, "function": getProfile.name });
var session = cls.getNamespace('session');
var auth = req.headers.authorization.split(" ");
var existingProfile = session.get("profile");
if (typeof existingProfile === "object" && existingProfile.hasOwnProperty("federatedId")) {
return next();
}
query_auth0.postTokenInfo(auth[1], function (err, profile) {
if (err) {
logger.warn("query_auth0 encountered an error", { error: err.message });
return next(err);
}
session.set("profile", profile);
next(err);
});
}
session.get («Профиль») заявление, прежде чем я называю query_auth0 работы и не отдай профиль сеанса (если есть один набор ранее в стеке). Однако session.set («профиль», профиль); строка дает мне ошибку.
Вызов функции query_auth0.postTokenInfo(), где он, кажется, сломается. Там есть несколько слоев, и вам может быть проще дать вам краткое описание того, что он делает:
Функция просто строит запрос на auth0 и затем отправляется через наш собственный модуль request_handler. Это просто построено на стороннем «запросе» модуле npm. Request_handler взаимодействует с cls, чтобы вытащить request_ids, но ничего не устанавливает.
Проблема, кажется, происходит после того, как сделан запрос (и успешно без проблем), однако, когда я пытаюсь добавить профиль, который вернулся, я получаю следующее исключение бросают:
An Uncaught Exception Occurred!
Error: No context available. ns.run() or ns.bind() must be called first.
at Namespace.set (E:\sitesroot\0\node_modules\continuation-local-storage\context.js:27:11)
at E:\sitesroot\0\shared\middleware\get_profile.js:45:35
at E:\sitesroot\0\shared\query_auth0.js:51:12
at E:\sitesroot\0\shared\request_handler.js:51:12
at E:\sitesroot\0\node_modules\async\lib\async.js:52:16
at Immediate.<anonymous> (E:\sitesroot\0\node_modules\async\lib\async.js:1206:34)
at Immediate.wrapped [as _onImmediate] (E:\sitesroot\0\node_modules\newrelic\lib\transaction\tracer\index.js:155:28)
at processImmediate [as _immediateCallback] (timers.js:383:17)
Опять же, это ошибка возникает, когда я использую newrelic module. В противном случае код работает отлично. Кроме того, проблема возникает, когда запрос завершается и перезванивается.
Кто-нибудь сталкивался с подобными проблемами при использовании New Relic в node.js, которые могли бы хотя бы указать мне в правильном направлении?