Я следую полному стеку руководства по веб-разработке. Репозиторий git можно найти здесь: https://github.com/cliveharber/gettingMean-2/tree/chapter-06
В главе 6 я создал API, который должен отображать список местоположений на основе координат GPS. Когда я проверяю запрос get, я получаю пустой массив. URL запроса получения: http://localhost: 3000 / api / location? Lat = 51.455041 & lng = -0.9690884
Это код контроллера для местоположений: обратите внимание, что я использую Mon goose агрегат с именем $ geonear, чтобы найти список местоположений, близких к указанной точке
const locationsListByDistance = async (req, res) => {
const lng = parseFloat(req.query.lng);
const lat = parseFloat(req.query.lat);
const near = {
type: "Point",
coordinates: [lng, lat]
};
const geoOptions = {
distanceField: "distance.calculated",
key: 'coords',
spherical: true,
maxDistance: 20000
};
if (!lng || !lat) {
return res
.status(404)
.json({ "message": "lng and lat query parameters are required" });
}
try {
const results = await Loc.aggregate([
{
$geoNear: {
near,
...geoOptions
}
}
]);
const locations = results.map(result => {
return {
id: result._id,
name: result.name,
address: result.address,
rating: result.rating,
facilities: result.facilities,
distance: `${result.distance.calculated.toFixed()}m`
}
});
res
.status(200)
.json(locations);
} catch (err) {
res
.status(404)
.json(err);
}
};
Это моя модель местоположения:
const locationSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
address: String,
rating: {
type: Number,
'default': 0,
min: 0,
max: 5
},
facilities: [String],
coords: {
type: {type: String},
coordinates: [Number]
},
openingTimes: [openingTimesSchema],
reviews: [reviewSchema]
});
Я уверен, что использую правильные координаты GPS в URL-адресе запроса на получение. Этот документ, который я пытаюсь получить из базы данных:
Я не уверен, почему я получаю пустой массив при тестировании этого API. Есть ли проблемы в моем коде?