2016-04-21 3 views
2

Я хочу иметь переменную, которая могла бы сохранить ее значение из последнего вызова API. То есть каждый раз, когда я вызываю /api, он увеличивает счетчик переменных на 1, а когда я вызываю /value, он показывает значение count. Поэтому, если я позвоню /api 3 раза, а затем позвоните по телефону /value, он должен распечатать 3.Статическая переменная через несколько вызовов API с помощью Express

Возможно ли это? Чтобы сохранить значение переменной, вы можете вызвать несколько вызовов API? Я пытаюсь избежать доступа к файлам и базам данных, я уверен, что смогу сделать это с ними.

+1

Вам нужно указать, следует ли ожидать, что эта переменная будет «на пользователя» или «g ЛОБАЛЬНЫЕ». Вы хотите, чтобы вызов/api от каждого отдельного пользователя использовал все тот же увеличивающий счет? Или каждый пользователь имеет свой собственный счет. Глобальный счетчик, который увеличивается для всех запросов, независимо от того, кто их создал, намного проще. – jfriend00

ответ

4

Если вы создаете переменную в top-level ваших JS файл, он будет глобальным для этого JS файл. Также, если ваши обработчики маршрутов /api и /value находятся в разных файлах, вы можете создать global variable, чтобы он был виден во всех ваших других файлах. Но вы должны учитывать, что никакие другие переменные не должны иметь то же имя, что и ваша глобальная переменная, потому что они будут перезаписаны. Здесь у вас есть хороший связанный пост: How to use global variable in node.js?

var count = 0; 

app.get('/api', function(req, res) { 
    count += 1; 
    res.send(); 
} 

app.get('/value', function(req, res) { 
    res.send(count); 
} 
+0

Простое решение, не знаю, почему я его раньше не видел. Благодарю. – Ernanirst

0

Да, использование может использовать экспресс-сессии или какой-либо другой сеанс для того же, или глобальную переменную

+0

Почему вы думаете сохранить эту переменную в сеансе? –

+0

Хранение в сеансе легко и удобно при отслеживании данных, а также помогает избежать сохранения значений в глобальной переменной. –

+0

Но мы не знаем реальной нагнетаемости этой переменной. Кажется, он ожидал быть чем-то глобальным. Не одна клиентская переменная. –

0

Вы можете установить глобальную переменную, как эта за пределами вашего апи ...

var count = 0; 

Затем сделать АНИ как это ...

app.get('/value', function(req, res) { 
    res.send(count); 
}) 
app.get('/api', function(req, res) { 
    count = count + 1; 
    res.send(); 
}) 

В приведенном выше примере используется экспресс-каркас. Если вы не используете его, вы должны привыкнуть к нему. Это отличная каркас!

3

Вы можете создать модуль, который может потребоваться в любой части вашего приложения.

Например, у вас есть модуль в counter.js определяется как

var counter = function() { 
    var count = 0; 

    this.addCount = function() { 
     count++ 
    } 

    this.getCount = function() { 
     return count; 
    } 
} 

counter.instance = null; 

counter.getInstance = function() { 
    if (this.instance === null) { 
     this.instance = new counter(); 
    } 

    return this.instance; 
} 

module.exports = counter.getInstance(); 

Теперь вы можете использовать его в server.js как этот

var express = require('express'); 
var app = express(); 

var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 

app.use(morgan('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

var counter = require('./counter.js'); 
app.get('/value', function(req, res, next) { 
    res.send('Count = ' + counter.getCount()); 
}); 

app.use('/api', require('./api.js')); 

var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 
    console.log("Server listening at http://%s:%s", host, port); 
}); 

И в вашем api.js как это

var express = require('express'); 
var router = express.Router(); 

var counter = require('./counter.js'); 

router.get('/', function(req, res, next) { 
    counter.addCount(); 
    res.send('API Called'); 
}); 

module.exports = router; 
+1

Это лучший подход, который я предполагаю –

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