Почему метод post не записывает новый объект в файл? - PullRequest
0 голосов
/ 14 ноября 2018

Когда я иду по маршруту '/ gallery / add', я добавляю тестовый объект: obj в метод db.write(obj), чтобы передать этот объект в 'db.js', где, используя write(data) Метод, я форматирую входящий объект в «JSON». Затем я записываю его в файл: posts.json и помещаю объект в массив this.formatePicture.

Но при переходе по маршруту '/ gallery / add' объект не добавляется ни в файл, ни в массив, ошибок нет. Скажите, что я делаю неправильно, и как с помощью метода post добавьте мой объект в файл: 'posts.json' и в массив this.formatePicture при навигации по маршруту '/ gallery / add':

app.js:

const express = require('express');
const Database = require('./db');

const app = express();
const port = 3000;
const db = new Database();

app.use(express.json());

app.get('/gallery', (request, response) => {
    if (request.query.id) {
        const picture = db.read(request.query.id);
        picture.then(data => {
            response.send(data);
        })
    } else {
        const pictures = db.read();
        pictures.then(data => {
            response.send(data);
        })
    }
});

app.get('/gallery/:id', (request, response) => {
    const picture = db.read(request.params.id);
    if (!picture) {
        response.status(404);
        response.send();
    } else {
        picture.then(data => {
            response.send(data);
        });
    }
});

app.post('/gallery/add', (request, response) => {
    const obj = {id: 88, title: 'test', date: 'test', url: 'test'};
    const newPicture = db.write(obj);
    newPicture.then(data => {
        response.status(200).send(data);
    })
});

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
});

db.js:

const fs = require('fs');
class Database {
    constructor() {
        this.formatePicture = [];
    }

    read(id) {
        return new Promise((resolve, reject) => {
            fs.readFile('./posts.json', 'utf-8', (err, data) => {
                if (err) {
                    reject(err)
                } else {
                    this.formatePicture = JSON.parse(data);
                    if (id) {
                        const pictureID = this.formatePicture.posts.find(p => p.id == parseInt(id));
                        resolve(pictureID);
                    } else {
                        resolve(this.formatePicture);
                    }
                }
            })
        })
    }
    write(data) {
        return new Promise((resolve, reject) => {
            const converData = JSON.stringify(data);
            fs.writeFile('./posts.json', converData, {flag: 'a'}, (err) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(this.formatePicture.posts.push(data));
                }
            })
        })

    }
}
module.exports = Database;

posts.json:

{
  "posts": [
    {
      "id": 1,
      "date": "2018-10-22T14:10:37.578Z",
      "title": "accusamus beatae ad facilis cum similique qui sunt",
      "url": "https://i.pinimg.com/originals/90/39/16/903916b9f0db6992f1a4b66ae3129fbe.jpg"
    },
    {
      "id": 2,
      "date": "2018-10-22T14:10:37.578Z",
      "title": "reprehenderit est deserunt velit ipsam",
      "url": "https://vignette.wikia.nocookie.net/okup/images/d/da/C683c20a5b0ae062b2325653f2fd3bdf.jpg/revision/latest?cb=20170131193210&path-prefix=da"
    }
      ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...