functions.js:
const fs = require("fs");
var items = [];
var addItem = (name, city) => {
var item = {
name,
city
};
console.log(items)
items.push(item)
fs.writeFileSync("entries.json", JSON.stringify(items))
};
module.exports = {
addItem
};
app.js:
const yargs = require("yargs");
const request = require("request");
const ext = require("./functions.js");
var argv = yargs
.options({
name:{
demand:true,
string:true,
describe:"Enter your name. "
},
city:{
demand:true,
string:true,
describe:"Enter the city you live in. "
}
})
.help()
.argv
var inputName = argv.name;
var inputCity = argv.city;
ext.addItem(inputName, inputCity);
我想要做的是每次运行其他文件app.js时将新对象推送到数组项中。当我在命令提示符下运行文件(节点app.js --title =" testing" --city =" Windsor")时,我得到的数组只有一个对象而我发现它一直在替换数组的第一项。我如何得到它,以便当应用程序运行时,它将另一个对象添加到数组而不是替换数组中的另一个项目。
[{"name":"aasdasdsdasd","city":"sdasdassddaasdasdasdsdn"}]
答案 0 :(得分:0)
items
数组正在使用空数组初始化...
我认为你需要在推送一个新对象之前阅读它,就像这样(未经测试):
const fs = require("fs");
function addItem(name, city) {
var item = {
name,
city
};
fs.readFileSync("entries.json", "utf8", function(err, data) {
if (err) throw err;
var items = JSON.parse(data);
items.push(item);
fs.writeFileSync("entries.json", JSON.stringify(items))
});
}
或者,您可以在顶部加载require
:
const items = require('entries.json');
答案 1 :(得分:0)
传递给options.flag
的{{1}}参数的默认值为fs.writeFileSync
。此选项可以是w
(https://nodejs.org/api/fs.html#fs_fs_open_path_flags_mode_callback),因此您只能看到文件中的最新项目。为了保留以前编写的组件,您需要附加到该文件。这可以通过将creates (if it does not exist) or truncates (if it exists)
作为a
传递来完成。