javascript - 使用 express 中间件设置 cookie

标签 javascript node.js apostrophe-cms

我尝试通过扩展 apostrophe-express 模块在页面加载时设置 cookie。但是控制台显示错误......在成功输出 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)

我错过了什么? This answer是我的中间件功能的基础。

编辑:设置 cookie 后返回 res.send('ok') 也会发生同样的情况。

最佳答案

要以正确的方式使用 express 中间件,必须设置 expressMiddleware 属性。

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

这会在浏览器中设置一个 cookie 并继续下一个中间件。

expressMiddleware 是每个模块都有的属性。无需扩展 apostrophe-express

如果我错了,请加强这个答案,关于这个话题还有更多要说的或者存在更好的方法。

关于javascript - 使用 express 中间件设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50976682/

相关文章:

javascript - 撇号 cms - 自定义页面设置

javascript - 如何使 Apostrophe/Node.js 内容页面可抓取?

javascript - redux 选择器不会相应地过滤嵌套数组

javascript - 无法完成与服务器的协商 - Angular + SignalR

json - Node.js Restify - 简单服务

javascript - Express session 表现不同 : How can I prevent my session from being destroyed after a page refresh?

javascript - 如何访问 apos.define 中的选项?

javascript - Ruby on Rails 中的 morris.js 错误

javascript - 引用和更改容器内 HTML 按钮的属性

javascript - 从按钮中间打开下拉菜单