Javascript Node.js:当按下submit按钮时,如何将公式的输入值写入JSON文件?
新:更具体的描述 我正在用不同类型的不同产品设计一个网站。每个产品都有一个带有评论功能的详细信息页面。产品详细信息站点的路径如下所示。当用户填写表单以编写注释并按下提交按钮时,所有数据都应附加到产品类型的JSON文件中,如下所示: type1.jsonJavascript 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",
[
{
"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
模块)fs
模块的方法,否则您的应用程序将被阻止提供请求谢谢你的回答!如何将表单数据写入JSON文件的右侧“comment”键?@LCP:这也是我的问题。你解决问题了吗?