Javascript Node.js导出的函数未返回正确的数据

Javascript Node.js导出的函数未返回正确的数据,javascript,node.js,express,undefined,ejs,Javascript,Node.js,Express,Undefined,Ejs,在我的node.js应用程序中,我让服务器从github获取atom提要,然后使用外部模块解析它。它可以在一个文件(getfeed.js)中正常工作,但当我将它导出到app.js文件并调用它时,它返回未定义的。当我在getfeed.js脚本中记录它时,它返回正确的数据;只是app.js中的数据没有定义。很奇怪。以下是相关代码: getfeed.js app.js 。 . var getFeed=require(“./getFeed”); . . . . . app.get(“/feed”,函数(

在我的node.js应用程序中,我让服务器从github获取atom提要,然后使用外部模块解析它。它可以在一个文件(getfeed.js)中正常工作,但当我将它导出到app.js文件并调用它时,它返回未定义的。当我在getfeed.js脚本中记录它时,它返回正确的数据;只是app.js中的数据没有定义。很奇怪。以下是相关代码:

getfeed.js app.js
。
.
var getFeed=require(“./getFeed”);
.
.
.
.
.
app.get(“/feed”,函数(请求,res){
var data=getFeed();
console.log(数据);//未定义
var formattedData=“Feed”+data+”“;//这不是最漂亮的东西,但它工作得很好
res.send(formattedData);//只在屏幕上打印未定义的内容:(
});
.
.
.
.
.

feedparser
是一个异步函数。您的
getfeed
函数返回此时未定义的totalText。您需要将回调传递给
getfeed
函数,并使用结果调用该回调

getfeed.js

module.exports = function(callback) {
然后在feedparser.on('readable')中-

app.js-

getFeed(function(data) { 
console.log(data); //undefined
    var formattedData = "<!DOCTYPE html><html><head><title>Feed</title></head><body>" + data + "</body></html>"; //Not the prettiest thing, but it works fine
    res.send(formattedData); //Just prints undefined onto the screen :(
});
getFeed(函数(数据){
console.log(数据);//未定义
var formattedData=“Feed”+data+”“;//这不是最漂亮的东西,但它工作得很好
res.send(formattedData);//只在屏幕上打印未定义的内容:(
});

我照你说的做了,但我收到了一个“发送后不能设置标题”错误,而且我只看到屏幕上的第一篇文章。有什么想法吗?你必须不止一次调用res.send。我在getfeed脚本中有一个stream.pipe将请求的输出发送到feedparser,但除此之外,与此无关h responses.这是我能想到编辑答案的唯一原因。现在可以工作了。做了两个主要的更改-1.取消了on('readable')上的totalText初始化2.调用了
feedparser.on('end')
的回调
module.exports = function(callback) {
var totalText = ''
feedparser.on('readable', 
    var stream = this
      , meta = this.meta
      , itemData;

    while (itemData = stream.read()) {
        totalText += ejs.render(templateString, { item : itemData } );        
    }
});

feedparser.on('end', function() {
    callback(totalText);
});
getFeed(function(data) { 
console.log(data); //undefined
    var formattedData = "<!DOCTYPE html><html><head><title>Feed</title></head><body>" + data + "</body></html>"; //Not the prettiest thing, but it works fine
    res.send(formattedData); //Just prints undefined onto the screen :(
});