javascript - Node.js 无法访问另一个 javascript 文件中的变量

标签 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', 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/

相关文章:

node.js - 尝试创建我的第一个 Node.js 应用程序 :/bin/sh: 1: fpm: not found

node.js - @ffmpeg/ffmpeg : Uncaught (in promise) ReferenceError: SharedArrayBuffer is not defined

javascript - 跨度中间对齐不起作用

javascript - 条形图图例在 amchart javascript 中不起作用

javascript - 当 AJAX 调用返回时,我如何让 Greasemonkey 做一些事情?

node.js - Node Js 代码用 0-9 的整数替换单词

javascript - 需要 InnerHTML 解决方案 - 应该很容易回答

javascript - 如何更改 "parent"帧的 URL?

node.js - 无法让 FFMPEG buildpack 在 Heroku Node.js 服务器中工作(使用 Fluent-FFMPEG)

node.js - 当我未登录 google 云端硬盘时,使用 google 云端硬盘 api 打开 google 云端硬盘文件