Javascript Node.js:当按下submit按钮时,如何将公式的输入值写入JSON文件?

Javascript Node.js:当按下submit按钮时,如何将公式的输入值写入JSON文件?,javascript,jquery,html,json,node.js,Javascript,Jquery,Html,Json,Node.js,新:更具体的描述 我正在用不同类型的不同产品设计一个网站。每个产品都有一个带有评论功能的详细信息页面。产品详细信息站点的路径如下所示。当用户填写表单以编写注释并按下提交按钮时,所有数据都应附加到产品类型的JSON文件中,如下所示: type1.json [ { "name": "Product1", "description": "Description1", "comments":[ { "user": "Matthew",

新:更具体的描述

我正在用不同类型的不同产品设计一个网站。每个产品都有一个带有评论功能的详细信息页面。产品详细信息站点的路径如下所示。当用户填写表单以编写注释并按下提交按钮时,所有数据都应附加到产品类型的JSON文件中,如下所示:

type1.json

[
  {
    "name": "Product1",
    "description": "Description1",
    "comments":[
      {
        "user": "Matthew",
        "message": "Very Good!",
        "timestamp": "2017-03-17T17:51Z"
      },{
        "user": "Lea",
        "message": "Nice",
        "timestamp": "2017-03-10T13:29Z"
      }
    ]
  },
  {
    "name": "Product2",
    "description": "Description2",
    "comments":[
      {
        "user": "Ann",
        "message": "This is very useful!",
        "timestamp": "2017-02-02T19:30Z"
      },{
        "user": "Tim",
        "message": "Awesome",
        "timestamp": "2017-04-01T20:25Z"
      }
    ]
]
这是我的HTML文件的一部分,其中包含以下表单:

details.html

<form action="" method="POST" id="commentForm">
    <div class="form-group">
        <input type="text" id="name"
               placeholder="Name" class="form-control" name="name"/>
    </div>
    <div class="form-group">
        <textarea cols="30" rows="5" class="form-control" id="message" placeholder="Message" name="message"></textarea>
    </div>
    <div class="form-group">
        <div class="col-md-6 text-center">
            <button type="reset" class="btn btn-default">
                <span class="glyphicon glyphicon-remove"></span>
                Reset
            </button>
        </div>
        <div class="col-md-6 text-center">
            <button type="submit" class="btn btn-success">
                <span class="glyphicon glyphicon-ok"></span>
                Send
            </button>
        </div>
    </div>
</form>
现在的问题是:在app.js中写什么? 下面是当前app.js的摘录

app.js

$(function () {
    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

    $("#commentForm").bind("submit", function(evt) {
        console.log(JSON.stringify($("#commentForm").serializeObject()));
        $.ajax({
            url: window.location.pathname,
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify($("#commentForm").serializeObject()),
            success: function(data) {
                console.log('success');
                console.log(JSON.stringify(data));
            },
        });
        return false;
    });
});
const express = require("express");
const app = express();
const fs = require('fs');
const path = require("path");
const jsonfile = require('jsonfile');
const bodyParser = require('body-parser');
app.use(bodyParser.json());

const type1File = __dirname + "/data/type1.json";

...

app.post("/details/:typ/:name", function (req, res) {
    if (req.params.typ == "type1") {
        const apps = readJsonFile(type1File);
        res.send(getProduct(apps, req));
???What to write here???
    }
...
});

function readJsonFile(file) {
    try {
        const data = fs.readFileSync(file);
        return JSON.parse(data);
    } catch (e) {
        console.log(file + "could not be read. " + e);
        return [];
    }
}

我应该补充什么?如何将数据写入正确JSON对象的“comment”键?请帮帮我,我花了很多时间尝试不同的东西,但没有什么是正确的

注意:这个答案是在问题重写之前写的:

这个问题太笼统了,很难给你任何具体的答案。但如果你想在你的应用程序中持久化数据,那么你应该使用数据库

有些数据库,如Mongo、Postgres或Redis,需要作为独立应用程序在同一台服务器或不同的服务器上运行。某些嵌入式数据库(如SQLite)不需要独立的进程,可以直接在应用程序中运行。数据库有多种选择,您必须根据自己的具体情况进行选择。但是您应该选择一些数据库来存储数据

这并不是说不可能在更新时写入JSON文件,然后根据需要读取这些文件,而是需要做大量的工作来同步对数据的访问,以便不会同时发生两个写入请求,也不会在写入过程中发生读取,如果不意外地阻塞流程中的事件循环并同时处理多个请求,那么这一切都比按预期使用任何数据库要困难得多

一些数据库,比如Mongo,可以让您存储任何JSON文档(实际上它存储BSON,但对于用户来说,它就像JSON)。使用Mongo或CouchDB之类的文档数据库与使用JSON文件最为相似,但使用关系数据库也可以。几乎所有持久数据都保存在数据库中。如果您可以编写自己的数据库,将数据存储在JSON文件中,那么在需要时一定要这样做,但如果您不能这样做,则只需使用合适的工具即可

话虽如此,如果您仍然坚持阅读和编写JSON文件,下面是应该做的:

要将数据作为JSON写入文件,需要使用
JSON.stringify()
fs.writeFile()

要从文件中读取JSON数据,需要使用
fs.readFile()
JSON.parse()

要记住的事情:

  • JSON.parse()
    JSON.stringify()
    必须始终包装在
    try
    /
    catch
    块中,否则您的应用程序将崩溃(或使用npm中的
    tryjson
    模块)
  • 切勿使用名称中带有“Sync”的
    fs
    模块的方法,否则您的应用程序将被阻止提供请求
  • 您需要实现对文件访问的锁定和同步,否则您的数据将被破坏-这是最困难和最重要的部分,这也是人们使用数据库进行此类操作的原因

  • 谢谢你的回答!如何将表单数据写入JSON文件的右侧“comment”键?@LCP:这也是我的问题。你解决问题了吗?