这是我的第一个 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', 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'
})
有人可以帮我吗?我尝试在网上查找,但仍然无法将各个部分组合在一起。
谢谢!
最佳答案
Create a promise for the response object and export it.
您的 T.get('search/tweets', params, searchedData)
是异步的。因此,您无法真正从 searchedData
函数的范围导出变量。您应该直接在主服务器文件中导入 twit 模块。或者,您可以创建一个可以导出然后导入到主文件中的 promise 。以下是如何使用 Promise 来做到这一点:
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 文件中导入这个 Promise 并执行如下操作:
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));
})
...
关于javascript - Node.js 无法访问另一个 javascript 文件中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51959676/