使用节点将 html-form 数据以 json 格式保存在 .json 文件中,并使用 javascript 表达
Save html-form data in json format in a .json file using node and express with javascript
节点和快递新手
我正在从 html-form 获取用户输入并尝试将其 append 或 push 到 .json 文件中。
我使用了 jsonfile npm-package 但它没有以 json
的数组格式出现
附加代码-
var express = require('express');
var app = express();
//jade --> ejs -->html
app.engine('html', require('ejs').renderFile);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
var jsonfile = require('jsonfile');
var file = './userdata.json'
//trying to write via form to json
app.post('/gettingdata', function(req, res) {
var user_id = req.body.usrid;
var token = req.body.usrphone;
var geo = req.body.usrdata;
//start writing
var obj = { name: user_id , phone: token, adress: geo }
jsonfile.writeFileSync(file, obj, {flag: 'a'});
//default
//res.send(user_id + ' ' + token + ' ' + geo);
});
html -
<body>
<form action="/gettingdata" method="post">
Name:<input type="text" name="usrid" /><br>
Phone:<input type="text" name="usrphone" /><br>
RData:<input type=="text" name="usrdata" /><br>
<input type="submit" value="Submit" >
</form>
</body>
json 显示为-
{"name":"name1","phone":"8989898989","adress":"random1"}
{"name":"name1","phone":"767656568","adress":"randomdata1"}
{"name":"name1","phone":"767656568","adress":"randomdata1"}
对象之间没有逗号,也没有方括号。我需要它们能够使解析成为可能,这样我以后就可以从我的前端动态地编辑和删除数据。
建议任何 link、方法或 npm 包来做 so.If 问题重复分享 link of that too
您使用的库似乎无法执行此操作。在这两种方法中,我都发现了这一点:
var str = JSON.stringify(obj, options.replacer, spaces) + '\n'
//not sure if fs.writeFileSync returns anything, but just in case
return fs.writeFileSync(file, str, options)
它将您刚刚传递给函数的字符串写入文件的位置,因此它不会评估已写入文件的内容。所以每次你调用这个函数它都会写一个json。它不会继续向现有 json 添加元素。你应该做一个自定义函数来做到这一点。
你可以这样做:
- 检索文件中已有的内容
- 解析为json
- 追加要添加的 json 对象
- 将结果字符串化并将其保存到文件中,以替换首先写入的内容。
编辑:
来源:
writeFile/
writeFileSync
我将用一些代码来扩展 Shil 的回答:
// 1. Read the existing file
fs.readFile(file, (err, data) => {
if (err && err.code === "ENOENT") {
// But the file might not yet exist. If so, just write the object and bail
return fs.writeFile(file, JSON.stringify([obj]), error => console.error);
}
else if (err) {
// Some other error
console.error(err);
}
// 2. Otherwise, get its JSON content
else {
try {
const fileData = JSON.parse(data);
// 3. Append the object you want
fileData.push(obj);
//4. Write the file back out
return fs.writeFile(file, JSON.stringify(fileData), error => console.error)
} catch(exception) {
console.error(exception);
}
}
});
这只是一个简单的说明性示例:随着文件的增长,它效率低下,因为它必须每次都读取和写入整个文件。
请注意,这将创建一个包含对象数组 的文件,这就是您在JSON 中制作对象列表的方式。所以您的最终输出将如下所示:
[
{"name":"name1","phone":"8989898989","adress":"random1"},
{"name":"name1","phone":"767656568","adress":"randomdata1"},
{"name":"name1","phone":"767656568","adress":"randomdata1"}
]
节点和快递新手 我正在从 html-form 获取用户输入并尝试将其 append 或 push 到 .json 文件中。 我使用了 jsonfile npm-package 但它没有以 json
的数组格式出现附加代码-
var express = require('express');
var app = express();
//jade --> ejs -->html
app.engine('html', require('ejs').renderFile);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
var jsonfile = require('jsonfile');
var file = './userdata.json'
//trying to write via form to json
app.post('/gettingdata', function(req, res) {
var user_id = req.body.usrid;
var token = req.body.usrphone;
var geo = req.body.usrdata;
//start writing
var obj = { name: user_id , phone: token, adress: geo }
jsonfile.writeFileSync(file, obj, {flag: 'a'});
//default
//res.send(user_id + ' ' + token + ' ' + geo);
});
html -
<body>
<form action="/gettingdata" method="post">
Name:<input type="text" name="usrid" /><br>
Phone:<input type="text" name="usrphone" /><br>
RData:<input type=="text" name="usrdata" /><br>
<input type="submit" value="Submit" >
</form>
</body>
json 显示为-
{"name":"name1","phone":"8989898989","adress":"random1"}
{"name":"name1","phone":"767656568","adress":"randomdata1"}
{"name":"name1","phone":"767656568","adress":"randomdata1"}
对象之间没有逗号,也没有方括号。我需要它们能够使解析成为可能,这样我以后就可以从我的前端动态地编辑和删除数据。 建议任何 link、方法或 npm 包来做 so.If 问题重复分享 link of that too
您使用的库似乎无法执行此操作。在这两种方法中,我都发现了这一点:
var str = JSON.stringify(obj, options.replacer, spaces) + '\n'
//not sure if fs.writeFileSync returns anything, but just in case
return fs.writeFileSync(file, str, options)
它将您刚刚传递给函数的字符串写入文件的位置,因此它不会评估已写入文件的内容。所以每次你调用这个函数它都会写一个json。它不会继续向现有 json 添加元素。你应该做一个自定义函数来做到这一点。
你可以这样做:
- 检索文件中已有的内容
- 解析为json
- 追加要添加的 json 对象
- 将结果字符串化并将其保存到文件中,以替换首先写入的内容。
编辑:
来源: writeFile/ writeFileSync
我将用一些代码来扩展 Shil 的回答:
// 1. Read the existing file
fs.readFile(file, (err, data) => {
if (err && err.code === "ENOENT") {
// But the file might not yet exist. If so, just write the object and bail
return fs.writeFile(file, JSON.stringify([obj]), error => console.error);
}
else if (err) {
// Some other error
console.error(err);
}
// 2. Otherwise, get its JSON content
else {
try {
const fileData = JSON.parse(data);
// 3. Append the object you want
fileData.push(obj);
//4. Write the file back out
return fs.writeFile(file, JSON.stringify(fileData), error => console.error)
} catch(exception) {
console.error(exception);
}
}
});
这只是一个简单的说明性示例:随着文件的增长,它效率低下,因为它必须每次都读取和写入整个文件。
请注意,这将创建一个包含对象数组 的文件,这就是您在JSON 中制作对象列表的方式。所以您的最终输出将如下所示:
[
{"name":"name1","phone":"8989898989","adress":"random1"},
{"name":"name1","phone":"767656568","adress":"randomdata1"},
{"name":"name1","phone":"767656568","adress":"randomdata1"}
]