Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用express中间件设置cookie_Javascript_Node.js_Apostrophe Cms - Fatal编程技术网

Javascript 使用express中间件设置cookie

Javascript 使用express中间件设置cookie,javascript,node.js,apostrophe-cms,Javascript,Node.js,Apostrophe Cms,我尝试通过扩展撇号express模块在页面加载上设置cookie。但是控制台显示了一个错误。。。成功向其输出req.cookies后 模块index.js的一部分: module.exports = { extend: 'apostrophe-express', // [...] middleware: [ function(req, res, next) { console.log(req.cookies); // Successful output.

我尝试通过扩展
撇号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)
{'[app].csrf':'[randomString]',
“[app].sid”:
“[someId]”
/Users/[user]/Node/[app]/Node_modules/撇号/lib/modules/撇号模板/index.js:608
请求browserCall($(“正文”););
^
TypeError:req.browserCall不是函数
位于Object.self.renderPageFormModule(/Users/[user]/Node/[app]/Node_modules/撇号/lib/modules/撇号模板/index.js:608:13)
at/Users/[user]/Node/[app]/Node_modules/撇号/lib/modules/撇号模块/index.js:349:31
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:726:13
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:52:16
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:264:21
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:44:16
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:723:17
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:167:37
at/Users/[user]/Node/[app]/Node\u modules/撇号/index.js:128:16
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:52:16
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:264:21
at/Users/[user]/Node/[app]/Node\u modules/async/lib/async.js:44:16
马上。是中间件功能的基础


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

要正确使用express middleware,必须设置
expressMiddleware
属性

afterConstruct: function(self) {
  self.expressMiddleware = function(req, res, next) {
    res.cookie('cookieName', 'value');
    return next();
  };
}
这将在浏览器中设置cookie,并继续使用下一个中间件

expressMiddleware
是每个模块都具有的属性。无需扩展
撇号express


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

好的,我删除了扩展
撇号express的行,错误不再发生,但是cookie不想被设置。您具体在哪里设置cookie?看起来您所做的只是记录当前请求中的cookies,而不是添加您自己的cookies。另外,您肯定不想在这里使用延长线。这意味着您正试图创建一个基于撇号表示的新模块,而不是修改现有的撇号表示模块。我明白了。但有一件奇怪的事情发生了:在设置了我的cookie之后,Chrome开发工具中的cookie下面出现了一条空行。