我有这段代码可以向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)}`);
});
任何帮助将不胜感激!
答案 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调用完成后尝试呈现。