在Node.js的功能范围之外访问http请求对象

时间:2018-08-14 20:45:54

标签: javascript node.js http python-requests

我有这段代码可以向API发出请求

var request = require('request');


 request('http://www.google.com', function (error, response, body) {
 console.log('error:', error); // Print the error if one occurred
 console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
 console.log('body:', body); // Print the HTML for the Google homepage.
    });

但是,我也在我的节点应用程序中提供了一条服务路线,并且得到的响应超出了该路线的范围。我想使用EJS将请求中的值添加到视图中,但是要使用EJS,我必须在.render()中定义文件要使用的值,而似乎无法获得这些值。

我的app.js看起来像这样

const express = require('express');
var request = require('request');
const path = require('path');
const chalk = require('chalk');

const app = express();
const port = process.env.PORT || 3000; // Port number

// var url = 'http://api.openweathermap.org/data/2.5/forecast?id=1253573&APPID=56e2043a628c776ab619d9d393c2b568&units=metric'; // API Request URL

app.use(express.static(path.join(__dirname, '/public/')));
app.use('/css', express.static(path.join(__dirname, '/node_modules/bootstrap/dist/css')));
app.use('/js', express.static(path.join(__dirname, '/node_modules/bootstrap/dist/js')));
app.use('/js', express.static(path.join(__dirname, '/node_modules/jquery/dist')));
app.set('views', './views');
app.set('view engine', 'ejs');


function apiCall(callback) {
  request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      var result = JSON.parse(body);
      // console.log(result);
      return callback(result, false);
    } else {
      return callback(null, error);;
    }
  });
}

app.get('/', (req, res) => {
  const url = 'http://api.openweathermap.org/data/2.5/forecast?id=1253573&APPID=56e2043a628c776ab619d9d393c2b568&units=metric'; // API Request URL

  const x = request(url, function (error, response, body){
  const result = JSON.parse(x.body);
  console.log(result);

  });
  res.render('index',{
      //temp: data.list[0].main.temp,
      place : result.city['name'] // || data.city['name'],
      //wind: data.list[0].wind.speed,
      //desc: data.list[0].weather[0].description,
      }
    );
    });

app.listen(port, () => {
  console.log(`listening on port ${chalk.green(port)}`);
});

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

const request = require('request');
const express = require('express');
const path = require('path');
const chalk = require('chalk');

const app = express();
const port = process.env.PORT || 3000; // Port number

app.use(express.static(path.join(__dirname, '/public/')));
app.use('/css', express.static(path.join(__dirname, '/node_modules/bootstrap/dist/css')));
app.use('/js', express.static(path.join(__dirname, '/node_modules/bootstrap/dist/js')));
app.use('/js', express.static(path.join(__dirname, '/node_modules/jquery/dist')));
app.set('views', './views');
app.set('view engine', 'ejs');


function apiCall(url, callback) {
  request(url, function(error, response, body) {
    if (!error && response.statusCode == 200) {
      var result = JSON.parse(body);
      // console.log(result);
      return callback(null, result);
    } else {
      return callback(error, null);;
    }
  });
}

app.get('/', (req, res) => {
  const url = 'http://api.openweathermap.org/data/2.5/forecast?id=1253573&APPID=56e2043a628c776ab619d9d393c2b568&units=metric'; // API Request URL

  apiCall(url, (err, body) => {
	if(err) {
    	// handle error
      return;
    }
    res.render('index', {
      //temp: data.list[0].main.temp,
      place: body.city['name'] // || data.city['name'],
      //wind: data.list[0].wind.speed,
      //desc: data.list[0].weather[0].description,
    });
  });

})


app.listen(port, () => {
  console.log(`listening on port ${chalk.green(port)}`);
});

如果您要在api调用完成后尝试呈现。