【问题标题】:Cannot view data on page after adding API requests nodejs添加API请求nodejs后无法在页面上查看数据
【发布时间】:2020-06-18 05:12:57
【问题描述】:

我添加了 API 请求,我相信这些请求会从 MongoDB 中检索数据。虽然运行代码时没有出现问题,但页面不显示任何数据;我只是收到一条错误消息(从单独的一段代码中检索),说明找不到该页面。

这是来自我的 Locations 控制器的代码:

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);
    });
};

【问题讨论】:

    标签: node.js api express


    【解决方案1】:

    renderHomepage 中有res.render('/'...,但 res.render 将要渲染的文件的名称作为第一个参数(减去文件扩展名):

    res.render('index', ...
    

    例如,如果您的主页位于 views/index.ejs 下。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2020-04-04
      • 2017-09-13
      相关资源
      最近更新 更多