2014-10-21 3 views
0

Я нашел несколько фрагментов из учебников express.js, как показано ниже.где значение express.js хранит переменную?

server.js

var express = require('express'), 
bodyParser = require('body-parser'), 
app = express(); 

app.use(bodyParser.urlencoded()); 

var names = []; 

app.get('/', function(req, res){ 

    res.render('index.jade', { names : names }); 
}); 

app.post('/', function(req, res){ 

names.push(req.body.name); 
res.redirect('/'); 
}); 

app.listen('3000',function(){ 

    console.log('start to listen port:3000'); 
}) 

index.jade

h1 Names 

ul 
    for name in names 
     li=name 

hr 
h1 Add Name 
form(method='POST') 
    input(name='name') 
    button Submit 

Как я представить некоторые имена, имена переменных продолжает показывать на странице!

Даже я начинаю новый браузер и проверяю корневую страницу, переменная имен все еще существует !!!!

Как это работает?

Насколько мне известно, HTTP не имеет гражданства. Я не думаю, что PHP мог бы сделать что-то вроде этого, поскольку он был перенаправлен, как червь сделал корневую страницу знанием переменной имен без сохранения в сеансе или куки?

И я не думаю, что переменная имен - это сеанс или файл cookie в приведенном выше коде.

Может кто-нибудь дать мне какой-нибудь намек? Спасибо!

ответ

1

Вы нажимаете их на names, который является переменной, объявленной в родительской области и, таким образом, доступной по всем запросам. Таким образом, это не для сеанса или для каждого запроса, это зависит от срока службы сервера.

+0

Спасибо, так значит ли это, если несколько пользователей представляют имена, все пользователи могут видеть весь список? –

+0

@wilsonLiu - да, это следствие использования переменной верхнего уровня, как вы используете, - эта переменная используется всеми запросами от всех пользователей. Если вы хотите хранить вещи от имени одного пользователя, тогда требуется больше работы, чтобы идентифицировать пользователя и хранить материал, особенно для них. Существуют модули сеанса, которые помогут вам в этом. – jfriend00

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