将数据写入JSON文件

时间:2017-12-12 15:58:03

标签: javascript jquery json node.js

我正在尝试将一个习惯对象列表写入JSON文件,但我无法弄明白。我这样做是因为我想将这个JSON文件与node.js一起使用。

我创建了一个带有“习惯”类的部分,我希望用这个部分来填充这个JSON文件,该部分本身从这段代码中获取习惯对象:

var addHabit = function () {
        var $new_habit = {
            "name":"",
            "value":0,
            "goal":0,
            "html": null
        }

        if ($(".habit-input input").val() !== "") {
            $new_habit.name = $("#habitinput .name").val();
            $new_habit.value = $("#habitinput .value").val();
            $new_habit.goal = $("#habitinput .goal").val();

            $new_habit.html = $("<p id="+uid+">").html("<span class=\"name\">"+$new_habit.name+"</span> <span class=\"val\">" + $new_habit.value + "</span>/" + "<span class=\"goal\">"+$new_habit.goal + "</span>"+
            "<button class=\"plus\">+</button><button class=\"min\">-</button><button class=\"delete\">x</button><button class=\"mod\">modify</button>");
            console.log($new_habit);
            $(".habits").append($new_habit.html);
            $(".habit-input input").val("");

            $("#"+uid + " .plus").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                $(this).parent().find(".val").text( val+1 );
                event.preventDefault();
            });
            $("#"+uid + " .min").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                $(this).parent().find(".val").text( val-1 );
                event.preventDefault();
            });
            $("#"+uid + " .delete").on("click", function (event) {
                $(this).parent().remove();
                event.preventDefault();
            });
            $("#"+uid + " .mod").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                var name = parseInt( $(this).parent().find(".name").text());
                var goal = parseInt( $(this).parent().find(".goal").text());
                $(this).parent().find(".val").text(val = $("#habitinput .value").val());
                $(this).parent().find(".name").text(name = $("#habitinput .name").val());
                $(this).parent().find(".goal").text(goal = $("#habitinput .goal").val());
                event.preventDefault();
            });

            uid++;
        };
    };

我想在JSON文件中阅读“习惯”部分,以便在此node.js文件中使用它:

var express = require("express");
var url = require("url");
var http = require("http");
var fs = require('fs');

var port = 3000;
var app = express();
app.use(express.static(__dirname + "/client"));
//logger component
app.use(function (req, res, next) {
    console.log("[LOG] %s %s", new Date(), req.url);
    next();
});

http.createServer(app).listen(port);

//clients requests habits
app.get("/habits", function (req, res) {
    console.log("Habits requested!");
    res.sendfile('Habit/client/habits.json');
});

我希望实现的是,当我在浏览器中访问localhost:3000/habits时,我获得了JSON格式的所有习惯对象。

当我转到localhost:3000/habits时,我得到了{"type":"Buffer","data":[123,13,10,32,32,32,32,34,121,101,121,34,32,58,32,49,50,13,10,125]}

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

你从GET /习惯中得到一个缓冲区。需要将其转换为您可以阅读的内容

尝试拨打toString('utf-8')

OR

import bodyParser from 'body-parser';
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));