0

这是代码:

exports.index_post = function(req, res) {
  var nicks = [];
  if (req.body.nick) {
    for (var nick in nicks) {
      if (nick == req.body.nick) {
        res.redirect("/");
      } else {
        nicks.push(req.body.nick)
        req.session.nick = req.body.nick;
        res.redirect("/msg");
        console.log(nicks);
      }
    }
  } else {
    res.redirect("/");
  }
};

它的意思是检查 req.body.nick 是否是 nicks 字典中的项目之一,如果是则将其重定向回根。如果它不在字典中,则应将其添加到字典中并将其设置为会话变量,然后重定向到 /msg。但是,此代码似乎对我不起作用,而是导致 Express 挂起。有人可以告诉我我做错了什么吗?谢谢。

4

2 回答 2

0

nicks首先,每次运行函数时都会创建一个新数组;听起来您希望它在服务器的整个生命周期中持续存在,每个请求都可能添加到nicks数组中。此外,尽管您正在遍历数组寻找req.body.nickif/else语句在循环内的写入方式,它总是会在循环的第一次迭代时重定向。尝试这样的事情:

var nicks = []; // don't reset `nicks` every call

exports.index_post = function(req, res) {
  if (req.body.nick) {
    if (nicks.indexOf(req.body.nick) != -1) { // better checking for nick in nicks
      res.redirect("/");
    } else {
      nicks.push(req.body.nick)
      req.session.nick = req.body.nick;
      res.redirect("/msg");
      console.log(nicks);
    }
  } else {
    res.redirect("/");
  }
};
于 2012-06-15T21:46:35.057 回答
0
  1. nicks的是空的

    所以你的 for 循环不会做任何事情

    你甚至没有机会往里面塞任何东西

  2. 对于每个请求,您都会有一个新nicks的,它不是全局的

于 2012-06-15T21:46:53.230 回答