2017-02-02 7 views
0

Я делаю вызов api и получаю данные, однако у меня возникают проблемы с отправкой данных обратно в файл js. Я попытался использовать res.send, но я получаю сообщение об ошибке. Я не могу понять, как отправить информацию обратно в файл javascript. (Я взял ключ из ссылки на запрос. Однако из соображений безопасности я возвращаю данные из вызова api). Единственная проблема, с которой я столкнулся, - это вернуть данные во внешний файл javascript.res.send не является функцией

Это файл Javascript, который посылает первоначальный запрос:

/ ********** options button function makes api call to get selected cities forecast ***************** 

function getCityForecast(e){ 


    var id = document.getElementById('cities'); 
    var getValue = id.options[id.selectedIndex].value; 
    var suffix = getValue + ".json"; 

    var newObj = JSON.stringify({link : suffix}); 

    var xhr = new XMLHttpRequest(); 

    xhr.open("POST", "http://localhost:3000/", true); 
    xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
    xhr.send(newObj); 

    xhr.onreadystatechange = function(){ 
     if(xhr.readyState === 4){ 
      console.log(xhr.response); 
      console.log('recieved'); 
     } else { 
      console.log('error'); 
     } 
    } 
} 

Мой файл server.js выглядит следующим образом:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var http = require('http'); 
var path = require('path'); 
var request = require('request'); 


// ****************** Middle Ware ******************* 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

app.use(express.static(__dirname + '/public')); 



var retrievedString; 
// **************** Post Request ******************* 
app.post('/', function(req, res){ 

var link = "http://api.wunderground.com/api/key/forecast"; 
retrievedString = link.concat(req.body.link); 

request = http.get(retrievedString , function(res){ 
    var body = ''; 

    res.on('data', function(data){ 
     body += data;  
    }); 

    res.on('end', function(){ 
     var parsed = JSON.parse(body); 
     console.log(parsed.forecast.txt_forecast); 
     res.send(parsed.forecast.txt_forecast); 
    }); 
}) 

    .on('error', function(e) { 
     console.log("Got error: " + e.message); 
    }); 
}); 

app.listen(3000, function() { console.log('listening')}); 

ответ

6

Вы перегружать определение переменной res, которая также то, что вы назвали переменной ответа для вашего метода обработчика маршрута Express. В функции обратного вызова запроса используйте другое имя для этой переменной - например:

request = http.get(retrievedString , function(resDoc){ 
+0

Спасибо @SylonZero Да, это была проблема. Я изменил его на: request = http.get (retrievedString, function (response) {и все соответствующие переменные, и он сработал. –

Смежные вопросы