mercredi 19 mai 2021

Can't figure out why JSON.parse unexpected

I am creating my web application in Node Js and Express, and I need to fill out forms and send data from these forms to a separate file, but as I understand it, data from the forms is not transmitted to me.

I did this, I have forms in popup-add.hbs that I process in popup-add.js

    const {Router} = require('express');
const Sign = require('../models/sign');
const router = Router();

router.get('/', (req, res) => {
    res.render('popup-add', {
        title: 'Добавление новой ЭП',
    });
});

router.post('/', async (req, res) => {
    const sign = new Sign(req.body.identificator, req.body.nameOwner, req.body.cabinet, req.body.provider, req.body.validityDateOpenKey, req.body.endDateOpenKey, req.body.validityDatePrivateKey, req.body.endDatePrivateKey, req.body.numberToken)

    await sign.save();


    res.redirect('/signs');
})

module.exports = router;

Then I created a model sign.js in which I describe a class for sign

class Sign {

constructor (identificator, nameOwner, cabinet, provider, validityDateOpenKey, endDateOpenKey, validityDatePrivateKey, endDatePrivateKey, numberToken) {
    this.identificator = identificator
    this.nameOwner - nameOwner
    this.cabinet = cabinet
    this.provider = provider
    this.validityDateOpenKey = validityDateOpenKey
    this.endDateOpenKey = endDateOpenKey
    this.validityDatePrivateKey = validityDatePrivateKey
    this.endDatePrivateKey = endDatePrivateKey
    this.numberToken = numberToken
    this.id = uuid()
}

toJSON() {
    return {
    identificator: this.identificator,
    nameOwner: this.nameOwner,
    cabinet: this.cabinet,
    provider: this.provider,
    validityDateOpenKey: this.validityDateOpenKey,
    endDateOpenKey: this.endDateOpenKey,
    validityDatePrivateKey: this.validityDatePrivateKey,
    endDatePrivateKey: this.endDatePrivateKey,
    numberToken: this.numberToken,
    id: this.id
    }
}

async save() {
    const signs = await Sign.getAll()
    signs.push(this.toJSON())
    
    return new Promise((resolve, reject) => {
        fs.writeFile(
            path.join(__dirname, '..', 'data', 'signs.json'),
            JSON.stringify(signs),
            (err) => {
                if(err) {
                    reject(err)
                } else {
                    resolve()
                }
            }
        )
    })
}

static getAll() {
    return new Promise((resolve, reject) => {
        fs.readFile(
            path.join(__dirname, '..', 'data', 'signs.json'),
            'utf-8',
            (err, content) => {
                if(err) {
                    reject(err)
                } else {
                    resolve(JSON.parse(content)) 
                }
            }
        )    
    })
}}

And when processing filling out forms on the site, it gives me in the console

undefined:1
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at C:\Users\goncharovds\Desktop\Node\Node-Work\models\sign.js:63:38
←[90m    at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:63:3)←[39m
[nodemon] app crashed - waiting for file changes before starting...

I thought about it for a long time, but I could not understand why the content is not transferred in JSON




Aucun commentaire:

Enregistrer un commentaire