JSON 变量未检索更新的值



我正在尝试发布从JSON文件中检索到的报价。我的代码每 20 秒发布一条推文(出于测试目的,它是 20 秒(。我可以找到我的报价并使用server(quoteIndex)函数将其放入 JSON 文件中。server(quoteIndex)在我的output.json文件中添加了一个新的报价。我知道output.json每次在偶数索引上找到报价时都会更新{"quote": ""}部分。但是,在我的tweetIt()函数中,当我分配var quoteFile = require("./output.json")时,我的quoteFile.quote值不会更新。这是一个问题,因为我的 JavaScript 机器人是一个推特机器人,它会在推特上引用引号。推特不允许重复引用,给我一个"重复状态"错误。

这是主代码

// I wanted to start at the 8th index and continue with every even index.
var quoteIndex = 8;
// post a tweet every 20 seconds
setInterval(tweetIt, 1000*20);

啾((

function tweetIt() {
//
// This will start looking for quotes to post
// It will put the quote in a JSON file
//
quoteIndex = quoteIndex + 2;
console.log('value of index: ' + quoteIndex)
server(quoteIndex);
var js = require('json-update');
js.load('./output.json', function(err, obj) {
console.log("Loaded from json:");
console.log(obj);                 // loads most recent quote
});                               // this is what I want to tweet

var quoteFile = require('./output.json');
// Read from JSON file for the quote
var params = {
status: quoteFile.quote       
}                                
//
// prints same quote each time, does not update
//
console.log("quote to tweet: " + quoteFile.quote) 
//  tweet a quote
//
// The first quote will tweet, however when the JSON file
// updates, I will get a "duplicate status" error.
// This is because my quoteFile still has not updated.
// 
T.post('statuses/update', params, getData);
function getData(err, data, response) {
if (err) {
console.log("Something went wrong!: " + err);
} else {
console.log("Tweeted something!");
}
}
}

服务器(报价编号(

function server(quoteNumber) {
var fs = require('fs');
var request = require("request"),
cheerio = require("cheerio"),
url = "https://en.wikiquote.org/wiki/A_Song_of_Ice_and_Fire";

request(url, function (error, response, body) {
if (!error) {
var $ = cheerio.load(body);
var quote;
var json = {quote : ""};
$( "div.mw-parser-output ul" ).filter(function( INDEX ) {
// even indexed quotes are the ones I want
if (INDEX % 2 == 0 && (INDEX == quoteNumber)) {
quote = $( this ).text();   
json.quote = quote;      // this also has the most recent quote
}
});
} else {
console.log("We’ve encountered an error: " + error);
}
//
// Write our quotes out to a JSON file.
//
fs.writeFile('output.json', JSON.stringify(json, null, 4).replace(/\n/g, " "), function(err){
console.log('File successfully written! - Check your project directory for the output.json file');
})
});

基本上,当我使用 node.js 运行代码时,第一个引号会发推文,因为 JSON 文件对我有一个引号。然后,当需要使用quoteIndex = quoteIndex + 2查找下一个报价时,我的 JSON 文件在我的项目文件夹中按预期更新。我的主要问题是在我的tweetIt()函数中,即使 JSON 文件为我提供了更新的报价,quoteFile.quote也没有显示更新的报价。如何获得更新的报价?

任何提示将不胜感激,谢谢。

每当您require()文件时,无论是模块、JSON 文件还是本机插件,一旦成功加载,它就会被缓存。如果需要能够重新加载 JSON 文件,则每次只需调用readFile()并手动JSON.parse()生成的文件数据。

最新更新