【问题标题】:Node JS -Routing Behavior with CookiesNode JS - 使用 Cookie 的路由行为
【发布时间】:2021-08-15 15:50:55
【问题描述】:

我正在尝试的一个简单场景,想知道这实际上是如何工作的。

我的路线:

    <div class="form">
        <h1>Welcome ,<%= USERNAME %> back to the site!</h1>
        <a href="/Story/1">Story 1</a>
        <a href="/Story/2">Story 2</a>
        <a href="/Story/3">Story 3</a>
        <a href="/Story/Blog">Blog 3</a>
        <p><a href="/logout">Logout</a></p>
    </div>

路由处理程序是通用的,我想构建而不是有点具体:

//参数处理:

// 所以目的只是从 URL 中获取通配符部分,并在此中间线中相应地设置 cookie 参数“myString”。

app.param("id", (req, res, next, id) => {
  console.log(id);
  if ((id === "1") | (id === "2") | (id === "3")) {
    res.cookie("myString", "Story");
  } else {
    res.cookie("myString", "Blog");
  }
  next();
});

// Generic Route Handler
app.get("/Story/:id", (req, res, next) => {
  res.send(` <h1>${req.cookies.myString}=> ${req.params.id}</h1>`);
});

但结果是: 当我点击任何故事链接时,我会收到以下回复:

http://localhost:3000/Story/1 结果是:故事=> 1

我看到我的 cookie 也按预期将“myString”设置为“Story”。

http://localhost:3000/Story/Blog 结果是:故事=> 博客

我已验证,现在我的 cookie 已按预期设置为“博客”)

但上面的结果显示的是 Story => Blog! 我原以为这是 Blog => Blog

有趣的是,如果我只是刷新页面,那么我会得到预期的结果。

似乎在执行以下代码时 cookie 设置不正确! res.send(` &lt;h1&gt;${req.cookies.myString}=&gt; ${req.params.id}&lt;/h1&gt;`);

有人可以帮我理解这种行为/异步性质吗?

  • 谢谢。

【问题讨论】:

    标签: javascript node.js express cookies


    【解决方案1】:

    这是一个基本的,我错过了,很遗憾! 应用参数处理程序正在响应部分设置 cookie。

    app.param("id", (req, res, next, id) => {
      console.log(id);
      if ((id === "1") | (id === "2") | (id === "3")) {
        res.cookie("myString", "Story");
      } else {
        res.cookie("myString", "Blog");
      }
      next();
    });
    

    当我调用 next() 时,它正在调用应用程序。 get() 函数显然具有相同的请求,并且到那时请求部分没有改变,因此它总是返回旧信息。

    作为解决方案,我使用了全局变量 app.locals.myString,它开始按预期工作。

    因此结束这个问题。

    • 谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      相关资源
      最近更新 更多