提问人:drowZ 提问时间:7/19/2016 更新时间:7/19/2016 访问量:1143
如何使用 NodeJS 编辑服务器存储的 JSON 文件
How to edit server stored JSON file with NodeJS
问:
我有一个托管在 localhost 上的 Web 服务器。我正在访问的网站是用 AngularJS 编写的“待办事项列表应用程序”。为了加载待办事项,浏览器会获取一个包含信息的 JSON 文件。举个例子:
[
{"name":"Clean the house"},
{"name":"Water the dog"},
{"name":"Feed the lawn"},
{"name":"Pay dem bills"},
{"name":"Run"},
{"name":"Swim"}
]
然后,它会遍历所有项目并将它们“打印”到网站上。我有多种选择,例如“保存”和“删除”。它们在客户端工作,但这种方式不允许我正确保存它们,因为当浏览器刷新时,所有内容都会使用服务器的静态 JSON 文件重置。
我想知道是否有某种方法可以使用 NodeJs 来托管网站并侦听传入的 AJAX 请求并据此编辑文件中的内容。
答:
0赞
gandharv garg
7/19/2016
#1
在 nodejs 中异步写入文件可以按如下方式完成。
var fs = require('fs');
var fileName = './file.json';
var file = require(fileName);
file.key = "new value"; // This will be coming as a http POST method from your view
fs.writeFile(fileName, JSON.stringify(file), function (err) {
if (err) return console.log(err);
console.log(JSON.stringify(file));
console.log('writing to ' + fileName);
});
需要注意的是,json 是用一行写入文件的,而不是美化的。前任:
{
"key": "value"
}
将...
{"key": "value"}
为避免这种情况,只需将这两个额外的参数添加到 JSON.stringify 中即可
JSON.stringify(file, null, 2)
null - 表示 Replacer 函数。(在这种情况下,我们不想更改过程)
2 - 表示要缩进的空格。
评论
0赞
drowZ
7/20/2016
我理解其中的大部分内容,除了这个:“file.key = ”新值“;从您的视图来看,这将作为 http POST 方法出现”。当您说它将作为 POST 输入时,您的意思是它会自动被视为一个,还是我应该在那里放其他东西?
0赞
Felix
7/19/2016
#2
NodeJS 不会保留开箱即用的数据。 您需要像 NodeJS + Express 这样的特殊 CRUD 路由,例如用于创建项目的 POST 或用于删除项目的 DELETE。
在此路由中,如果要使用 MongoDB,则必须添加一个数据持久层,例如 mongoose,或者如果要在其后面添加 SQL 数据库,则必须添加 Sequelize。
每个 ORM 都需要指定一个可以保存的数据模型。
下面是一个猫鼬实现的例子:
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var plugins = require('./model.server.plugins');
/**
* Customer Schema
*/
var CustomerSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill a name',
trim: true
},
created: {
type: Date,
default: Date.now
}
});
mongoose.model('Customer', CustomerSchema);
这是控制器 “使用严格”;
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
errorHandler = require('./errors.server.controller'),
Customer = mongoose.model('Customer'),
_ = require('lodash');
/**
* Create a Customer
*/
exports.create = function(req, res) {
var customer = new Customer(req.depopulated);
customer.user = req.user;
customer.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(customer);
}
});
};
这里是路线
router.route('/')
.post(customers.create);
评论
0赞
drowZ
7/20/2016
谢谢,但我需要更简单一点的东西。我理解你在说的一些东西,但我只想改变一个JSON文件。我不担心其他任何事情。我考虑过使用一个名为 ngCookies 的 angular 依赖项将其存储在本地计算机上,但它不允许实际的服务器更新。你能推荐一些更简单的东西吗?
0赞
Felix
7/20/2016
当您需要数据持久化并且不喜欢使用 da 数据库作为存储时,您可以读取和写入文件,但这种方法并不漂亮,我不会在生产环境中使用它。
评论