我正在尝试使用state方法在响应对象之后的路由处理程序下创建一个cookie,但是该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名称”出现在开发者控制台的“名称”下方,并且希望“ cookie值”显示为“值”。什么都没有显示,刷新本地主机后,我收到此错误消息:
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?
答案 0 :(得分:0)
要合法设置Cookie,首先需要通过调用server.state(name, [options])
方法(其中name是 cookie 名称)来配置cookie。 选项是用于配置该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及其值。