Невозможно просмотреть данные на странице после добавления запросов API nodejs - PullRequest
0 голосов
/ 17 июня 2020

Я добавил запросы API, которые, как мне кажется, будут извлекать данные из MongoDB. Хотя при запуске кода проблем не возникает, страницы не показывают никаких данных; Я просто получаю сообщение об ошибке (полученное из отдельного фрагмента кода) о том, что страница не может быть найдена.

Это код из моего контроллера местоположений:

module.exports.homelist = function(req, res){
    var requestOptions, path;
    path = '/api/locations';
    requestOptions = {
        url : apiOptions.server + path,
        method : "GET", 
        json : {},
        qs : {
            lng : -0.7992599,
            lat : 51.378091,
            maxDistance : 20
        }
    };

    request (
        requestOptions,
        function(err, response, body) {
            var i, data;
            data = body;
            if(response.statusCode === 200 && data.length){
            for (i=0; i<data.length; i++) {
                data[i].distance = _formatDistance(data[i].distance);
            }
         }  
          renderLocHomepage(req, res, body);
        }
    );

 var _formatDistance = function (distance){
     var numDistance, unit;
     if (distance > 1){
         numDistance = parseFloat(distance).toFixed(1);
         unit = 'km';
     } else {
         numDistance = parseInt(distance * 1000,10);
         unit = 'm';
     }
     return numDistance + unit;
 }
}; 
var renderLocHomepage = function(req, res, responseBody){
    var message;
    if(!(responseBody instanceof Array)){
        message = "API lookup error";
        responseBody = [];
    } else {
      if (!responseBody.length) {
          message = "No places found nearby";
        }
    }
    res.render('location', {
        title: 'Location Title 2',
    pageHeader: {
        title: 'fuiewhf',
        strapline: 'sdjkcdivfdvdj'
    },
    sidebar: "efvibjdmkdsuidjvifdvhiskfbvzd",
    locations: responseBody,
    message: message
  });
};
/* GET 'Locations List' page*/
module.exports.locationsList = function(req, res) {
    res.render('locations-list', {title: 'Locations List'});
};

module.exports.locationInfo = function(req, res){
    renderDetailPage(req, res);
};

var renderDetailPage = function (req, res, locDetail){
    res.render('location-info', {
        title: locDetail.name,
        pageHeader: {title: locDetail.name},
        sidebar: {
            context: 'is on Loc8r because it has some accessible wifi and space to sit',
            callToAction: 'If you\'ve been and you like it or don\'t, please leave a review'
        },
        location: locDetail
    });
};




/*GET 'Location info' page */
module.exports.locationInfo = function(req, res){
    var requestOptions, path;
    path = "/api/locations/" + req.params.locationid;
    requestOptions = {
        url : apiOptions.server + path,
        method : "GET",
        json : {}
    };
    request (requestOptions, function(err, response, body) {
          var data = body;
          if (response.statusCode === 200){
          data.coords = {
              lng : body.coords[0],
              lat : body.coords[1],
          };  
            renderDetailPage(req, res, data);
        } else{
            _showError(req, res, response.statusCode);
        }
      }
   );
};

module.exports.locationsListByDistance = function(req, res){
    var lng = parseFloat(req.query.lng);
    var lat = parseFloat(req.query.lat);
    var point = {
        type: "Point",
        coordinates: [lng, lat]
    };
    var geoOptions = {
        spherical: true,
        maxDistance: theEarth.getRadsFromDistance(20),
        num: 10
    };
    if ((!lng && lng!==0) || (!lat && lat!==0)) {
        sendJsonResponse(res, 404, {
            "message": "lng and lat query parameters are required"
        });
        return;
    }
    Location.geoNear(point, geoOptions, function(err, results, stats){
        var locations = [];
        if (err) {
            sendJsonResponse(res, 404, err);
        } else {
          results.forEach(function(doc) {
            locations.push({
                distance: theEarth.getDistanceFromRads(doc.dis),
                name: doc.obj.name,
                address: doc.obj.address,
                rating: doc.obj.rating,
                facilities: doc.obj.facilities,
                _id: doc.obj._id
            });
        });
            sendJsonResponse(res, 200, locations);
       }
     });
  };
var _formatDistance = function (distance){
     var numDistance, unit;
     if (distance > 1){
         numDistance = parseFloat(distance).toFixed(1);
         unit = 'km';
     } else {
         numDistance = parseInt(distance * 1000,10);
         unit = 'm';
     }
     return numDistance + unit;
 };
//defining a call to an API
var requestOptions = {
    url: "", //define URL of API call to be made
    method: "GET", //set request method
    json: {},
    qs: {
        offset: 20
    }
};
request(requestOptions, function(err, response, body) {
    if(err){
        console.log(err);
    } else if(response.statusCode === 200) {
        console.log(body);
    } else {
        console.log(response.statusCode);
    }
});

//Create a new reusable function to get location information
var getLocationInfo = function(req, res, callback) {
    var requestOptions, path;
    path = "/api/locations/" + req.params.locationid;
    requestOptions = {
        url : apiOptions.server + path,
        method : "GET",
        json : {}
    };
    request (
        requestOptions,
        function(err, response, body) {
            var data = body;
            if (response.statusCode === 200) {
                data.coords = {
                    lng : body.coords[0],
                    lat : body.coords[1]
                };
                callback(req, res, data);

            } else {
                _showError(req, res, response.statusCode);
            }
        }
    );
};

module.exports.locationInfo = function(req, res){
    getLocationInfo(req, res, function (req, res, responseData){
        renderDetailPage(req, res, responseData);
    });
};

1 Ответ

0 голосов
/ 17 июня 2020

В renderHomepage у вас есть res.render('/'..., но res.render принимает в качестве первого параметра имя файла, который вы хотите отобразить (без расширения файла):

res.render('index', ...

, если ваша домашняя страница находится под views / index.e js например.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...