我完全不熟悉NodeJS,这个问题一直困扰着我好几天了。我拉我的头发找到一个工作解决方案。我试图从数据库中获取信息并将其传递给一个文本文件,然后我从中读取它。我不能顺序地做。它总是先读取它然后创建它。我不知道我应该采取什么方式来解决这个问题。任何工作解决方案/方式都将有极大的帮助。NodeJS-如何顺序创建一个文件然后读取?
从数据库中检索信息,我的连接文件:调用接收数据的方法
this.getInfo = function() {
return new Promise(function(resolve, reject){
db.query('SELECT ai_code from user_code',
function(err,rows){
if(err)
reject(err);
resolve(rows);
});
});
}
module.exports =
{
getInfo: this.getInfo
}
功能。
function team1Code(){
db.getInfo().then(function(result){
var code = JSON.stringify(result[0]);
var c = json2plain(code, options);
c = c.replace('Ai_code:','');
fs.writeFile('./scr1.js', c, { overwrite: true, encoding: 'ascii' },function (err) {
if (err) return console.log(err);
});
});
}
function team2Code(){
db.getInfo().then(function(result){
var code = JSON.stringify(result[1]);
var c = json2plain(code, options);
c = c.replace('Ai_code:','');
fs.writeFile('./scr2.js', c, { overwrite: true, encoding: 'ascii' },function (err) {
if (err) return console.log(err);
});
});
}
最后,这是我们尝试读取文件的内容。
vmHandler.init = function(apiValues) {
team1Code();
team2Code();
// Team 1
try{
vmHandler.team1.scriptCode = fs.readFileSync('./scr1.js');
vmHandler.team1.script = new vm.Script(vmHandler.team1.scriptCode);
vmHandler.team1.sandbox = { api: new Api(apiValues, 1) }
vmHandler.team1.context = new vm.createContext(vmHandler.team1.sandbox);
}catch(err){}
// Team 2
try {
vmHandler.team2.scriptCode = fs.readFileSync('./scr2.js');
vmHandler.team2.script = new vm.Script(vmHandler.team2.scriptCode);
vmHandler.team2.sandbox = { api: new Api(apiValues, 2) }
vmHandler.team2.context = new vm.createContext(vmHandler.team2.sandbox);
} catch(err) {
console.log("ERROR: " + err);
}
};
非常感谢@nurulnabi表现出勇气,并花时间重新编码。它现在几乎可以工作,但是在'init'之后接收代码的另一部分代码存在一个小问题。即使在发生此问题之前,我似乎也无法绕过它。程序的这一部分并行运行,不管怎样,从'init'返回的代码部分都没有。它最终没有定义。 'api'是未定义的,就好像它从未从文件接收任何东西。代码位于以下链接中,您可以看到该部分。 https://hastebin.com/afenaqojut.js –
您能否提供完整的代码文件@VG – nurulnabi
确实。 https://hastebin.com/qafihumeji。js –