Установить cookie с помощью промежуточного ПО Express

Я пытаюсь установить файл cookie при загрузке страницы, расширив модуль apostrophe-express. Но консоль показывает ошибку... после успешного вывода на нее req.cookies.

Часть модуля index.js:

module.exports = {
  extend: 'apostrophe-express',
  // [...]
  middleware: [
    function(req, res, next) {
      console.log(req.cookies); // Successful output.
      return next(); // App crashes.
    }
  ]
};

Выход консоли; заменены значения пользователя, приложения и файла cookie:

{ '[app].csrf': '[randomString]',
  '[app].sid':
   '[someId]' }
/Users/[user]/Node/[app]/node_modules/apostrophe/lib/modules/apostrophe-templates/index.js:608
        req.browserCall('apos.pageReadyWhenCalm($("body"));');
            ^

TypeError: req.browserCall is not a function
    at Object.self.renderPageForModule (/Users/[user]/Node/[app]/node_modules/apostrophe/lib/modules/apostrophe-templates/index.js:608:13)
    at /Users/[user]/Node/[app]/node_modules/apostrophe/lib/modules/apostrophe-module/index.js:349:31
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:726:13
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:52:16
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:264:21
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:44:16
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:723:17
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:167:37
    at /Users/[user]/Node/[app]/node_modules/apostrophe/index.js:128:16
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:52:16
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:264:21
    at /Users/[user]/Node/[app]/node_modules/async/lib/async.js:44:16
    at Immediate.<anonymous> (/Users/[user]/Node/[app]/node_modules/apostrophe/index.js:429:20)
    at runCallback (timers.js:696:18)
    at tryOnImmediate (timers.js:667:5)
    at processImmediate (timers.js:649:5)

Что мне не хватает? Этот ответ был моей основой для функции промежуточного программного обеспечения.

Изменить: то же самое происходит, возвращая res.send('ok') после установки файла cookie.


person cajak    schedule 21.06.2018    source источник
comment
Хорошо, я удалил строку для расширения apostrophe-express, и ошибка больше не возникает, но cookie не хочет устанавливаться.   -  person cajak    schedule 22.06.2018
comment
Где именно вы устанавливаете cookie? Похоже, все, что вы делаете, это регистрируете файлы cookie, которые в настоящее время находятся в запросе, вместо того, чтобы добавлять свои собственные. Кроме того, вы определенно не хотите использовать здесь линию расширения. Это означает, что вы пытаетесь создать новый модуль, основанный на апострофе-экспресс, вместо того, чтобы модифицировать существующий модуль апостроф-экспресс.   -  person Joseph    schedule 22.06.2018
comment
Я ответил на свой вопрос. Догадаться. Но происходит одна странная вещь: после установки файла cookie в инструментах разработчика Chrome под файлами cookie появляется пустая строка.   -  person cajak    schedule 23.06.2018


Ответы (1)


Чтобы правильно использовать экспресс-промежуточное ПО, необходимо установить свойство expressMiddleware.

afterConstruct: function(self) {
  self.expressMiddleware = function(req, res, next) {
    res.cookie('cookieName', 'value');
    return next();
  };
}

Это устанавливает файл cookie в браузере и переходит к следующему промежуточному программному обеспечению.

expressMiddleware — это свойство, которое есть у каждого модуля. Нет необходимости расширять apostrophe-express.

Пожалуйста, улучшите этот ответ, если я ошибаюсь, есть что сказать по этой теме или существует лучший способ.

person cajak    schedule 23.06.2018