Return 来自 axios 的数据,以便通过车把将其显示在屏幕上
Return data from axios in order to display it on screen through handlebars
我有基本的 Node Js 应用程序,我想在其中显示给定位置的天气我有这个 post 路由,它正在渲染带有给定对象的天气页面:
app.post("/weather",(req,res)=>{
res.render('weather.hbs',{
temperature:fetchLocation(req.body.location),
location:req.body.location
});
});
我还有 fetchLocation 函数,它使用 axios 从 api
获取数据
function fetchLocation(location){
const encodedLocation = encodeURIComponent(location);
const url = `https://api.openweathermap.org/data/2.5/weather?
q=${encodedLocation}&units=metric&appid=ID`;
return axios.get(url)
.then(response=>{
response.data.main.temp;
})
.catch(error=>{
console.log(error.message);
});
}
我无法从 axios 获取数据,它正在返回 undefiend 或 Promise pending
您需要使用 return
语句来 return 来自像这样的承诺的值
您还应该等待结果才能发回。您可以使用 async/await 或在收到数据后调用 res.render() 函数轻松实现,如下所示:
fetchLocation().then(data => res.render({ ... })
function fetchLocation(location){
const encodedLocation = encodeURIComponent(location);
const url = `https://api.openweathermap.org/data/2.5/weather?
q=${encodedLocation}&units=metric&appid=ID`;
return axios.get(url)
.then(response=>{
--------------------------> return response.data.main.temp;
})
.catch(error=>{
console.log(error.message);
});
}
// with async / await
app.post("/weather",async (req,res)=>{
res.render('weather.hbs',{
temperature: await fetchLocation(req.body.location),
location:req.body.location
});
});
// OR without
app.post("/weather",(req,res)=>{
fetchLocation(req.body.location).then(data => {
res.render('weather.hbs',{
temperature: data,
location:req.body.location
});
})
});
我有基本的 Node Js 应用程序,我想在其中显示给定位置的天气我有这个 post 路由,它正在渲染带有给定对象的天气页面:
app.post("/weather",(req,res)=>{
res.render('weather.hbs',{
temperature:fetchLocation(req.body.location),
location:req.body.location
});
});
我还有 fetchLocation 函数,它使用 axios 从 api
获取数据 function fetchLocation(location){
const encodedLocation = encodeURIComponent(location);
const url = `https://api.openweathermap.org/data/2.5/weather?
q=${encodedLocation}&units=metric&appid=ID`;
return axios.get(url)
.then(response=>{
response.data.main.temp;
})
.catch(error=>{
console.log(error.message);
});
}
我无法从 axios 获取数据,它正在返回 undefiend 或 Promise pending
您需要使用 return
语句来 return 来自像这样的承诺的值
您还应该等待结果才能发回。您可以使用 async/await 或在收到数据后调用 res.render() 函数轻松实现,如下所示:
fetchLocation().then(data => res.render({ ... })
function fetchLocation(location){
const encodedLocation = encodeURIComponent(location);
const url = `https://api.openweathermap.org/data/2.5/weather?
q=${encodedLocation}&units=metric&appid=ID`;
return axios.get(url)
.then(response=>{
--------------------------> return response.data.main.temp;
})
.catch(error=>{
console.log(error.message);
});
}
// with async / await
app.post("/weather",async (req,res)=>{
res.render('weather.hbs',{
temperature: await fetchLocation(req.body.location),
location:req.body.location
});
});
// OR without
app.post("/weather",(req,res)=>{
fetchLocation(req.body.location).then(data => {
res.render('weather.hbs',{
temperature: data,
location:req.body.location
});
})
});