如何使用NodeJS编辑服务器存储的JSON文件

时间:2016-07-19 10:28:17

标签: angularjs json node.js server-side

我有一个托管在localhost上的Web服务器。我访问的网站是一个" Todo列表应用程序"用AngularJS编写。要加载todo,浏览器会获取包含该信息的JSON文件。一个例子:

    [
  {"name":"Clean the house"},
  {"name":"Water the dog"},
  {"name":"Feed the lawn"},
  {"name":"Pay dem bills"},
  {"name":"Run"},
  {"name":"Swim"}
]

然后循环遍历所有项目"打印"他们到网站上。我有各种选择,如" Save"和"删除"。它们在客户端工作,但这种方式不允许我正确保存它们,因为刷新浏览器时,所有内容都将使用服务器的静态JSON文件重置。

我想知道是否有某种方法可以使用NodeJ来托管网站并监听传入的AJAX请求并根据该文件编辑文件中的内容。

2 个答案:

答案 0 :(得分:0)

在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 - 表示替换器功能。 (在这种情况下,我们不想改变过程)

2 - 表示缩进的空格。

答案 1 :(得分:0)

NodeJS不会保留开箱即用的数据。 你需要像NodeJS + Express这样的东西和像POST这样的特殊CRUD路径来创建项目,或者删除DELETE来删除它们。

如果你想在它后面添加一个SQL数据库,你需要使用MongoDB或Sequelize,在这个路由中你必须添加像mongoose这样的数据持久层。

每个ORM都需要指定一个可以保存的Datamodel。

这是一个mongoose实现的例子:

 '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);