javascript - 使用node和javascript将html表单数据以json格式保存在.json文件中

标签 javascript json node.js express push

node和express的新手 我正在从 html 表单获取用户输入,并尝试将其附加或推送到 .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"}

对象之间没有逗号,也没有方括号。我需要它们能够进行解析,以便我稍后可以动态地编辑和删除前端的数据。 建议任何链接、方法或 npm 包来执行此操作。如果问题重复,也请分享该链接

最佳答案

我将用一些代码扩展 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"}
]

关于javascript - 使用node和javascript将html表单数据以json格式保存在.json文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45237999/

相关文章:

php - 在 php Web 应用程序上创建 NodeJS 聊天

node.js - 如果模板存在,如何自动处理get请求(使用node.js+express)

php - JavaScript 相当于按引用分配?

python - TypeError : list indices must be integers, 不是带有 JSON 的 str

node.js - 通过 Node 请求包递归使用 async/await

android - 从 API 解析 LibGDX JSON

javascript - D3 中父/子层次结构中的多级映射可能吗?

javascript - React 中出现意外 token

javascript - 如何在 NodeJS 应用程序的服务器端评估 Ruby?

javascript - AJAX 调用 PHP 不返回任何值