Я относительно новичок в веб-разработке и пытаюсь выяснить, как публиковать серверную среду (dev, test, prod и т. Д.) Для интерфейса.Дизайн шаблона как альтернатива внешнему шаблону locals
Я использую Node.js с Express, но следующий код ближе к псевдокоду, потому что это скорее вопрос шаблона проектирования.
Один из способов опубликовать серверную среду с Экспресс, чтобы добавить это промежуточное программное:
app.use(function(req,res,next){
res.locals.env= {}; //we add the property env to locals
});
так что теперь в фронтальном шаблоне мы можем получить доступ к местным жителям «окр» переменная:
<div>
<% app.env = env %> //hopefully 'env' will be available in a front-end template
</div>
Я не уверен, что выше стандартное, но я чувствую, что это, безусловно, не идеально.
Так я думал, возможно, мы могли бы сделать это вместо того, чтобы, как для первого запроса HTTP, первый запрос сокета, или все запросы (?):
// псевдокод ниже
app.get('/', function(req,res,next){
if(req.isAuthenticated()){
socket.on('received-env-info', function(err,msg){
res.render('index',{auth:true});
}
socket.emit('send-env-info', env);
}
else{
res.render('index',{auth:false});
}
});
таким образом, мы можем быть уверены, что клиент знает, что такое среда (или любые другие переменные сервера), прежде чем какой-либо html будет отправлен на сервер. (Мы предполагаем, что на клиенте есть обработчик socket.io, который затем устанавливает глобальное env на клиенте на переменную, которая была отправлена с сервера).
Это хороший дизайн, или плохой?
дополнительный кредит: мы могли бы взять ту же самую идею, и использовать его для аутентификации также:
app.get('/', function(req,res,next){
var infoForClient = {auth:null,env:env}; //should probably set auth to false for security but using 'null' for illustration purposes
if(req.isAuthenticated()){
infoForClient.auth = true;
}
else{
infoForClient.auth = false;
}
socket.on('received-info-from-client', function(msg){
if(msg === 'success'{ //some success message or another
res.render('index',infoForClient);
}
else{
infoForClient.auth = false;
res.render('index',infoForClient);
}
}
socket.emit('send-info-to-client', infoForClient);
}
});
Мне просто нужно знать, если это разумный подход или не
хммм это заставляет меня задаться вопросом, если есть передний конец шаблон дизайна, который гарантирует, что глобальные значения устанавливаются перед любым происходит повторная реновация –