![](/img/trans.png)
[英]How can I transfer a variable from a javascript file to another html file in node.js?
[英]Node.js Can't access variable in another javascript file
這是我的第一個 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 帖子存儲在最后一個函數中返回的“響應”變量中。 當我打印響應變量時,它會正確打印帖子。 我需要在運行服務器的 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'
})
誰能幫幫我嗎? 我嘗試在網上查找,但我仍然無法將這些碎片拼湊在一起。
謝謝!
為響應對象創建一個承諾並將其導出。
你的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文件中導入這個 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));
})
...
module.exports.getTweets = function(callback) {
var Twit = require('twit');
var config = require('./config')
var T = new Twit(config);
var params = {
q: '#stackOverflow',
count: 1
}
T.get('search/tweets', params, callback);
}
您應該使用回調鏈來正確獲取推文。
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)
});
})
當您想使用文件外的任何函數時,請使用module.export 。 使其可用。
搜索.js
var Twit = require('twit');
var config = require('./config')
var T = new Twit(config);
var getTweet = function (params, callback) {
T.get('search/tweets', params, function (err, data, response) {
if (error) {
console.log(error);
callback(error,null);
} else {
callback(null,data);
}
});
}
module.exports.getTweet = getTweet;
索引.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...");
var params = {
q: '#stackOverflow',
count: 1
}
mySearch.getTweet(params,function(error,response){
error ? console.log(error) : console.log(response);
});
});
您必須在search.js
文件中導出模塊。 這樣做的代碼如下所示:
module.exports = {
response: response
};
但是,正如評論中所述,對於一個功能齊全的模塊,您需要導出一個 Promise,例如,假設從 twitter 獲取數據是一個異步操作。 為此,請創建如下函數:
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!
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.