我不知道这是不是最好的地方问,但是。
我正在构建一个天气应用程序,它使用axios
使用api,然后使用express提供服务。我想知道我应该在哪里添加缓存来提高api的速度?当我使用时是在axios层还是在express层。
下面是我的代码,用于一点上下文
import { weatherApiKey } from 'config';
import axios from 'axios';
const forecast = (location, service) => {
console.log('inside api calling location: ', location);
axios.get(`http://api.openweathermap.org/data/2.5/weather?q=${location}&appid=${weatherApiKey}`)
.then(res => {
service(undefined, res.data)
})
.catch(err => {
service('Error calling weather API');
})
}
module.exports = forecast;
然后,我将通过以下方式为使用的api提供服务。
app.get('/weather', (req, res) => {
const locale = req.query.locale;
if(!locale) {
return res.send({
error: 'Please provide valid locale'
})
}
foreCast(locale, (err, weatherData) => {
if(err) {
console.log('error in calling weather API')
res.send({err});
}
console.log('returning weather data', weatherData)
res.send({weatherData})
});
})
1条答案
按热度按时间tp5buhyn1#
是的,通常有很多表单和层需要缓存。考虑到你正在创建一个API,我希望一些缓存尽可能地应用到消费者。这可能是在CDN级别。但是,一个快速简单的答案是为你的Express应用添加一些东西作为可缓存的中间件。
有很多方法可以填充和失效缓存,您需要注意针对您的用例进行规划。尽量不要过早地优化缓存。它会带来复杂性和依赖性,并且在应用大量缓存层时会导致难以调试的问题。
但一个简单的例子是这样的:
注意:这是使用memory-cache npm套件从https://medium.com/the-node-js-collection/simple-server-side-cache-for-express-js-with-node-js-45ff296ca0f0取得的。