![](/img/trans.png)
[英]I want to get my textbox values from HTML document and post those when submit button is pressed using Json file in node JS
[英]Node.js: How to write input values of a formular into a JSON file when the submit button is pressed?
新:更多具体说明
我正在使用不同类型的不同产品对网站进行编程。 每个产品都有一个带有注释功能的详细信息页面。 产品详细信息站点的路径类似于http:// localhost:3000 / details / type / name 。 当用户填写表单以写评论并按下“提交”按钮时,所有数据都应附加到产品类型的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>
这是我的JavaScript文件的相关部分:
details.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;
});
});
现在,问题是:在app.js中写什么? 以下是当前app.js的摘录。
app.js
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对象的“注释”键? 请帮助我,我花了很多时间尝试不同的东西,但是没有任何效果。
注意:此答案是在重写问题之前编写的: https : //stackoverflow.com/posts/43213085/revisions
这个问题太笼统了,很难给您任何具体的答案。 但是,如果要在应用程序中保留持久性数据,则应使用数据库。
某些数据库(例如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
模块方法,否则您的应用将无法处理请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.