我在节点 js 中使用 appendFile 但 File 的内容是随机的
I use the appendFile in node js but the File 's condtent is random
这是我的代码:
var fs = require('fs');
var fs2 = require('fs');
var i;
var slash = '/';
fs.open('target.txt', 'r', function (err, fd) {
if (err) throw err;
console.log('file open complete');
});
fs2.open('log2.txt', 'w', function (err, fd) {
if (err) throw err;
console.log('file open complete');
})
var array = fs.readFileSync('target.txt').toString().split("\n");
var i = 0;
var slash = ' ';
for (i = 0; i < array.length; ++i) {
if (i % 2 == 1) {
var query = array[i];
if (i != array.length - 1)
fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)).concat(slash), 'utf-8', function (error) { });
else if (i == array.length - 1)
fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 1)), 'utf-8', function (error) { });
console.log(query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)));
}
}
文本文件如下所示:
---->2018-09-12 1. 23818 [] [thread : main] [priority : DEBUG] [category : javasql.ClientSql] [Class : javasql.ClientSql] [method : insertToDb] [ndc : ]- [log content : com.mysql.cj.jdbc.ClientPreparedStatement: insert into db]
此代码逐行读取文本文件并将它们保存在数组中
并解析偶数的数据库查询并附加到 log.txt
.
它似乎运行良好,但 log.txt
文件的内容是随机的。
当我运行 node.js log.txt的代码是Insert into values/Create values
但几乎运行节点js中的代码
Create valuesInsert into values/
顺序已更改。我没碰target.txt
。
为什么会出现这个问题?
它发生只是因为appendFile
是异步操作。因此,您需要完全重写代码或将 appendFile
替换为 appendFileSync
.
这是我的代码:
var fs = require('fs');
var fs2 = require('fs');
var i;
var slash = '/';
fs.open('target.txt', 'r', function (err, fd) {
if (err) throw err;
console.log('file open complete');
});
fs2.open('log2.txt', 'w', function (err, fd) {
if (err) throw err;
console.log('file open complete');
})
var array = fs.readFileSync('target.txt').toString().split("\n");
var i = 0;
var slash = ' ';
for (i = 0; i < array.length; ++i) {
if (i % 2 == 1) {
var query = array[i];
if (i != array.length - 1)
fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)).concat(slash), 'utf-8', function (error) { });
else if (i == array.length - 1)
fs2.appendFile('log2.txt', query.substring((query.lastIndexOf(': ') + 2), (query.length - 1)), 'utf-8', function (error) { });
console.log(query.substring((query.lastIndexOf(': ') + 2), (query.length - 2)));
}
}
文本文件如下所示:
---->2018-09-12 1. 23818 [] [thread : main] [priority : DEBUG] [category : javasql.ClientSql] [Class : javasql.ClientSql] [method : insertToDb] [ndc : ]- [log content : com.mysql.cj.jdbc.ClientPreparedStatement: insert into db]
此代码逐行读取文本文件并将它们保存在数组中
并解析偶数的数据库查询并附加到 log.txt
.
它似乎运行良好,但 log.txt
文件的内容是随机的。
当我运行 node.js log.txt的代码是Insert into values/Create values
但几乎运行节点js中的代码
Create valuesInsert into values/
顺序已更改。我没碰target.txt
。
为什么会出现这个问题?
它发生只是因为appendFile
是异步操作。因此,您需要完全重写代码或将 appendFile
替换为 appendFileSync
.