Node.js可以';t访问另一个javascript文件中的变量
这是我的第一个javascript文件,名为search.js,用于通过twitter帖子进行查询Node.js可以';t访问另一个javascript文件中的变量,javascript,node.js,Javascript,Node.js,这是我的第一个javascript文件,名为search.js,用于通过twitter帖子进行查询 var Twit = require('twit'); var config = require('./config') var T = new Twit(config); var params = { q: '#stackOverflow', count: 1 } var response = null; T.get('search/tweets', para
var Twit = require('twit');
var config = require('./config')
var T = new Twit(config);
var params = {
q: '#stackOverflow',
count: 1
}
var response = null;
T.get('search/tweets', params, searchedData);
function searchedData(err, data, response) {
response = data
console.log(response) //prints the post
return response;
}
twitter帖子存储在最后一个函数返回的“response”变量中。当我打印响应变量时,它会正确地打印帖子。我需要访问运行服务器的index.js中的变量
这是我的index.js文件:
const mySearch = require('./search.js');
const express = require('express');
const app = express();
app.get('/', function(req, res) {
res.send('Hello World');
})
app.listen(3000, function(){
console.log("Server started on port 3000...");
console.log(mySearch.response)//prints 'undefined'
})
有人能帮我吗?我试着在网上查找,但我仍然无法将这些片段组合起来
谢谢 您必须在
search.js
文件中导出模块。执行此操作的代码如下所示:
module.exports = {
response: response
};
module.exports = {
function getData() {
return new Promise(function (resolve, reject) {
var response = null;
T.get('search/tweets', params, function (err, data, response) {
if (err) {
reject(err);
}
else {
response = data
console.log(response) // prints the post
resolve(response);
}
});
});
}
}
但是,如评论中所述,对于一个功能齐全的模块,您需要导出一个承诺,例如,考虑到从twitter获取数据是一个异步操作。为此,请创建如下函数:
module.exports = {
response: response
};
module.exports = {
function getData() {
return new Promise(function (resolve, reject) {
var response = null;
T.get('search/tweets', params, function (err, data, response) {
if (err) {
reject(err);
}
else {
response = data
console.log(response) // prints the post
resolve(response);
}
});
});
}
}
您可以通过以下方式让他们访问检索到的推文:
mySearch.getData().then(function (response) {
console.log(response); // Data retrieved
}).catch(function (error) {
console.log(error); // Error!
});
为响应对象创建一个承诺,并将其导出
您的T.get('search/tweets',params,searchedData)
是异步的。因此,您不能真正从searchedData
函数的范围导出变量。您可以直接在主服务器文件中导入twit模块。或者,您可以创建一个承诺,可以先导出,然后在主文件中导入。以下是您如何使用承诺来实现这一目标:
var Twit = require('twit');
var config = require('./config')
var T = new Twit(config);
var params = {
q: '#stackOverflow',
count: 1
}
var postPromise = new Promise((resolve, reject) => {
T.get('search/tweets', params, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data)
}
});
});
module.export.postPromise = postPromise;
然后,您可以将此承诺导入index.js文件,并执行以下操作:
const getPosts = require('./search.js').postPromise;
const express = require('express');
const app = express();
app.get('/posts', function(req, res) {
getPosts.then(posts => res.status(200).json(posts));
})
...
您应该使用回调链接来正确获取tweet
const mySearch = require('./search.js');
const express = require('express');
const app = express();
app.get('/', function(req, res) {
res.send('Hello World');
})
app.listen(3000, function() {
console.log("Server started on port 3000...");
//console.log(mySearch.response)//prints 'undefined'
mySearch.getTweets(function(err, data, response) {
console.log(data)
});
})
如果要使用文件之外的任何函数,请使用模块。导出。 使其可用 Search.js index.js
这是第一步,但它不起作用,因为填充
响应
变量的代码是异步的。你们都是对的!编辑了这篇文章,完全回答了他的问题,谢谢你的提示!您在哪里调用了searchedData函数?它应该在你的应用程序中调用。listen,你应该能够在那里捕获变量中的返回值。
const mySearch = require('./search.js');
const express = require('express');
const app = express();
app.get('/', function(req, res) {
res.send('Hello World');
})
app.listen(3000, function(){
console.log("Server started on port 3000...");
var params = {
q: '#stackOverflow',
count: 1
}
mySearch.getTweet(params,function(error,response){
error ? console.log(error) : console.log(response);
});
});