【发布时间】:2021-06-15 05:55:03
【问题描述】:
let quote;
let author;
// Get Method For The Root Route
app.get('/', (req, res)=>{
res.render('home', {
quote: quote,
writer: author
});
});
// Post Method For The Root Route
app.post('/', (req, res)=>{
// API URL
const url = 'https://goquotes-api.herokuapp.com/api/v1/random?count=1';
https.get(url, (response)=>{
console.log(response.statusCode);
// On Getting Data From API Parse It And Update Global Variables
response.on('data', (data)=>{
const randomQuote = JSON.parse(data);
quote = '" ' + randomQuote.quotes[0].text + ' "';
author = '- ' + randomQuote.quotes[0].author;
console.log(quote);
res.redirect('/');
});
});
});
我正在使用 Node 和 ExpressJS。当我在我的计算机上本地尝试这个 Web 应用程序时,每当我重新加载页面时,变量引用并且作者变得未定义(这就是我想要的),但是当我在 Heroku 上部署我的应用程序时,即使在刷新我的页面后一旦值设置为那些变量它们保持不变并且不会变空。我希望它像在本地机器上一样工作,任何帮助将不胜感激
【问题讨论】:
-
我不确切知道这里发生了什么,但我强烈建议您避免在您的应用程序中使用全局变量。它会导致意外的行为,也使测试变得更加困难。
-
你不应该使用全局变量,如果你愿意,你可以使用res.locals
-
如果您希望此信息在多个路由中“持续存在”,则需要将其存储在会话中,否则保存为全局变量将不起作用。您的 API 应该是无状态的。
-
@MohammedAlhila 在这种情况下您不能使用
res.locals,因为它们是处理不同路由的两个不同控制器。如果其中一个是在最后一个函数执行之前运行的中间件函数,那么res.locals将适用于此。 -
@goto1 是的,谢谢。正是我在谈论中间件
标签: javascript node.js express heroku ejs