Узел: Невозможно вызвать ключ продолжения-локальное хранилище внутри обратного вызова gRPC, используя экспресс - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь сохранить идентификатор в локальном хранилище продолжения, чтобы после успешного запроса gRPC вывести его в журналах.Я создаю пространство имен в начале приложения, затем устанавливаю идентификатор в промежуточном программном обеспечении (в полной реализации идентификатор будет указан в запросе).Затем я пытаюсь получить идентификатор в get ('/').Получение идентификатора работает, но я не могу получить его внутри запроса gRPC:

app.js

const cls = require('continuation-local-storage');
cls.createNamespace("THING");
var express = require('express');
var path = require('path');
var index = require('./routes/index');
var app = express();

const storeRequestId = (req, res, next) => {
  const ns = cls.getNamespace("THING");
  ns.run(() => {
    ns.set('thing-id', '123');
    next();
  });
}
app.use(storeRequestId);

app.use('/', index);

module.exports = app;

index.js

const cls = require('continuation-local-storage');
var express = require('express');
var router = express.Router();
var grpc = require('grpc');
const path = 'path/to/proto'
const rootPath = 'root/path'
console.log({root: rootPath, file: path})

const identityService = grpc.load({root: rootPath, file: path}).identity.service;
const grpcCredentials = grpc.credentials.createInsecure();
const identityClient = new identityService.Identity('localhost:8020', grpcCredentials)

/* GET home page. */
router.get('/', function(req, res, next) {
  ns = cls.getNamespace('THING');
  console.log(ns.get('thing-id'));

  const retrievePartyReq = {
    party_id: 'party123',
  }

  identityClient.retrieveParty(retrievePartyReq, (err, response) => {
    ns = cls.getNamespace('THING');
    console.log(ns.get('thing-id'));
  })

  res.status(200).send('200: All is good.');
});

module.exports = router;

Это выводитв логах:

123
undefined

Где бы я ожидал 123 оба раза.Почему я не могу получить значение из пространства имен из запроса gRPC?

1 Ответ

0 голосов
/ 30 ноября 2018

Я решил вместо этого переключиться на cls-hooked.Кажется, что вилка продолжения-локального хранилища работает лучше.Просто убедитесь, что версия вашего узла> = 9.

...