res.send不是一个函数

时间:2017-02-02 01:18:02

标签: javascript node.js express

我正在进行api调用并收到数据,但是,我无法将数据发送回我的js文件。我尝试使用res.send但是我收到了一个错误。我似乎无法弄清楚如何将信息发送回javascript文件。 (我把我的密钥从请求链接中取出。但是出于安全原因,我从api调用中获取数据)。我唯一的问题是将数据返回到前端javascript文件。

这是发送原始请求的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')});

1 个答案:

答案 0 :(得分:8)

您正在重载变量res的定义,这也是您称为Express路由处理程序方法的响应变量。在请求的回调函数中,为该变量使用不同的名称 - 例如:

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