gpt4 book ai didi

javascript - 将对象从节点传递到前端

转载 作者:行者123 更新时间:2023-11-30 14:08:54 25 4
gpt4 key购买 nike

我似乎无法使用 node.js 将数组传递到前端(javascript)。

我将国家名称从 mysql 数据库传递到 .geocode 调用中。但是目前我似乎无法将整个东西附加到数组/对象中,然后将其传递给渲染方法以在前端显示。它总是空的。

Js

//route for homepage
app.get('/', (req, res) => {

let sql = "SELECT country_name from countries";
let query = conn.query(sql, (err, results) => {
if (err) throw err;


for (i = 0; i < results.length; i++) {
geoLoc = []

const promises = results.map(result => new Promise(function(resolve, reject) {
geo.geocode('mapbox.places', result.Country_Name, function (err, geoData) {
if(err) reject()
if(geoData){
resolve(geoData.features[0])
};
});
}))

Promise.all(promises).then((geoLoc) => {
res.render('layouts/layout', {
results: geoLoc
});
})


}

});
});

第一个控制台

[ { id: 'country.11971821457735890',
type: 'Feature',
place_type: [ 'country' ],
relevance: 1,
properties: { short_code: 'bj', wikidata: 'Q962' },
text: 'Benin',
place_name: 'Benin',
bbox: [ 0.776667, 6.13014, 3.843051, 12.408444 ],
center: [ 2.18333, 8.83333 ],
geometry: { type: 'Point', coordinates: [Array] } },
{ id: 'country.8605848117814600',
type: 'Feature',
place_type: [ 'country' ],
relevance: 1,
properties: { short_code: 'gb', wikidata: 'Q145' },
text: 'United Kingdom',
place_name: 'United Kingdom',
bbox: [ -8.718659, 49.802665, 1.867399, 60.945453 ],
center: [ -2, 54 ],
geometry: { type: 'Point', coordinates: [Array] } } ]

第二个控制台只显示一个空数组。

最佳答案

编辑:

您的 res.render() 需要等待,直到您的 geoLoc 被累积。您可以按照@Sayegh 或回调的建议尝试 promise 。

你甚至可以使用这样的东西,但 Promise 或 callback 将是一个合适的选择

geo.geocode("mapbox.places", results[i].Country_Name, function(err, geoData) {
if (geoData) {
geoLoc.push(geoData.features[0]);
console.log(geoLoc);
}
});

if(geoLoc){
res.render('layouts/layout', {
results: geoLoc
});
}

关于javascript - 将对象从节点传递到前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54847092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com