Я пишу приложение React (Экспресс-сервер), который отображает на сервере клиента + с использованием общей ('изоморфной') кодовой базы. В некоторых случаях, когда сервер является средством визуализации, я хочу получить доступ к объекту запроса, не передавая его по всему месту. Поскольку узел отвечает на один запрос за раз, небезопасно ли использовать кеширование переменной, не забудьте сбросить ее перед отправкой ответа?Избегайте пролета вокруг объекта запроса
Это работает, но может кто-то сказать мне, почему это либо хорошо или плохая идея? ...
server.js
var r = require('./request-store');
app.use(function(req, res, next) {
r.set(req);
next();
});
var resolve = require('./resolve');
// ...deferring to react router for client/server routing
app.use(function(req, res) {
resolve().then(function(data) {
r.set(null);
res.render('index', { data: data });
});
});
запроса store.js
var r = null;
module.exports.set = function(req) { r = req; };
module.exports.get = function() { return r; };
resolve.js
var r = require('./request-store');
module.exports = function() {
return new Promise(resolve, reject) {
if (isServer) {
console.log(r.get());
resolve();
} else if (isClient) {
resolve();
}
}
};
Если это случай, тогда да, это не сработает. Так можно ли выразить для обработки другого запроса до того, как он выдает предыдущие res? – ndreckshage
Конечно, предположим, что у вас есть запрос к базе данных, который требует секунд для обработки, поскольку узел является асинхронным, что операция db не блокирует выполнение последующих запросов. –
Хорошо, как я экспериментировал с этим было несколько вкладок, открытых в Chrome, которые, по-видимому, ждут отправки следующего запроса на тот же URL-адрес, пока не вернется первый. Вот почему я был в замешательстве. Проверяя это с помощью нескольких браузеров + сканер apache, я отчетливо вижу проблему. Благодарю. – ndreckshage