Как установить cookie в обработчике маршрута, используя метод state () для объекта ответа? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать cookie под моим обработчиком маршрута после объекта ответа методом state, но cookie никак не появляется. Даже вставка многих примеров на сайте hapijs также не работает.

Мой index.js:

const Hapi = require('hapi')

const server = new Hapi.Server
({
  host: 'localhost',
  port: 8000
})

server.route({
  method: 'GET',
  path: '/',
  config: {
    handler: (request, h) => {
      return h.response(`Cookie!`).state('cookie-name', 'cookie-value');
    }
  }
})


async function start() {
  await server.start();
  console.log(`Server started at ${ server.info.uri }`);
}

start();

Я ожидал, что «cookie-name» появится под «name» в консоли разработчика, а «cookie-value» появится в качестве «value». Ничего не появляется, и я получаю это сообщение об ошибке при обновлении моего localhost:

Debug: internal, implementation, error 
    Error: Invalid cookie value: [object Object]
    at exports.Definitions.internals.Definitions.internals.Definitions.format (/Users/cayden/Documents/egghead/introduction-to-node-servers-with-hapijs/lessons/12-hapi.js-managing-state-with-cookies/node_modules/hapi/node_modules/statehood/lib/index.js:361:24)
    at process._tickCallback (internal/process/next_tick.js:68:7)

Создание файла cookie так, как я это делаю, близко к примеру, который я видел на их веб-сайте. Что мне не хватает, из-за чего мой код не создает cookie?

1 Ответ

0 голосов
/ 08 июня 2019

Чтобы правильно установить cookie, сначала необходимо настроить cookie, вызвав метод server.state(name, [options]), где name - это имя cookie . И options являются объектами для настройки этого cookie.

Добавьте следующие строки кода в существующий код:


 server.state("cookie-name", {
        ttl: null,
        isSecure:  false,
        isHttpOnly: true,
        clearInvalid: false,
        strictHeader: true
  });

  server.route({
     method: 'GET',
     path: '/',
     config: {
         handler: (request, h) => {
            return h.response(`Cookie!`).state('cookie-name', 'cookie-value');
           }
       }
   })

Надеюсь, теперь вы можете увидеть cookie и его значение в браузере разработки.

...