2012-06-15 2 views
0

Вот код:Javascript, если не в словаре (Node.js)

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 это один из элементов в словаре зарубки, и если если перенаправляет его обратно в корень. Если он не находится в словаре, он должен добавить его в словарь и установить его как переменную сеанса, а затем перенаправить на/msg. Тем не менее, этот код, похоже, не работает для меня, и вместо этого он заставляет Express зависать. Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодарю.

+0

Массивы не являются словарями. Кроме того, ваша логика полностью нарушена - вы перенаправляете запрос _once для каждого элемента в 'nicks'_, т. Е. Если у вас есть 10 элементов, вы попытаетесь перенаправить запрос 10 раз. – lanzz

ответ

0

Во-первых, вы создаете новый массив nicks при каждом запуске функции; похоже, что вы хотите, чтобы это сохранялось на протяжении всего срока службы сервера, каждый запрос, потенциально добавляющий массив nicks. Кроме того, хотя вы итерации по массиву ищет req.body.nick, то, как оператор if/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("/"); 
    } 
}; 
+0

А ... Спасибо! Я понимаю, как он работает сейчас. И ваше решение работает :) Еще раз спасибо! Я буду принимать ваш ответ как можно скорее. –

0
  1. Ваш nicks пуст

    так ваш цикл не будет делать что-либо

    вы даже не имеют возможности выдвинуть что-нибудь в него

  2. Для каждого запроса у вас будет новый nicks, он не является глобальным

Смежные вопросы