Не могу сделать рендеринг в файл EJS - PullRequest
0 голосов
/ 02 июня 2018

Я изучаю node.js, и теперь я пытаюсь записывать и читать данные в / из JSON.Мне удалось выяснить, как записать данные из формы в файл JSON и как получить их на внешний интерфейс.Но теперь у меня возникла проблема, когда я публикую новые данные из формы, сайт должен вернуться к test.ejs с сообщением «Файл загружен».Вместо этого я получаю сообщение об ошибке "dataTest не определен.

Вот мой код test.ejs из папки views

<div class="container">

        <%= typeof msg != 'undefined' ? msg : '' %>
        <form action="test/send" method="post" role="form">
            Name:<input type="text" name="name" /><br>
            Lastname:<input type="text" name="lastname" /><br>
            Adress:<input type=="text" name="adress" /><br>
            <input type="submit" value="Submit" >
    </form>

    <div class="users">
        <% dataTest.forEach(function(dat) { %>
            <p>
                <%= dat.name %>
                <%= dat.lastname %>
                <%= dat.adress %>
            </p>
        <% }); %>
    </div>

и мой код test.js из папки маршрутов

var express = require('express');
var fs = require('fs');
var bodyParser = require('body-parser');

var router = express.Router();

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: false }));

var dataTest = require('../data/dataTest.json');

// GET test page.
router.get('/', (req,res) => res.render('test', {dataTest: dataTest}));

// POST data to dataTest.json
router.post('/send', (req,res) => {
    var file = './data/dataTest.json';

    var name = req.body.name;
    var lastname = req.body.lastname;
    var adress = req.body.adress;

    var obj = { name: name,lastname: lastname,adress: adress };

// 1. Read the existing file
fs.readFile(file, (err, data) => {
    if (err && err.code === "ENOENT") {
        return fs.writeFile(file, JSON.stringify([obj]), error => console.error);
    }
    else if (err) {
        console.error(err);
    }    
    else {
        try {
            const fileData = JSON.parse(data);
            fileData.push(obj);
            return fs.writeFile(file, JSON.stringify(fileData), error => console.error)
        } catch(exception) {
            console.error(exception);
        }
    }
});
res.render('test', {msg: 'File Uploaded!'});
})

module.exports = router;

Где я ошибся?

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Полагаю, это

var dataTest = require('../data/dataTest.json'); 

возвращает неопределенное значение, что в свою очередь составляет dataTest неопределенное значение здесь

res.render('test', {dataTest: dataTest}));

, поэтому я предлагаю вам проверить, что dataTest содержит допустимое содержимое.просто сделай

console.log(dataTest);
0 голосов
/ 02 июня 2018

Если dataTest не определено, вы, вероятно, должны определить его:

res.render('test', {dataTest: [], msg: 'File Uploaded!'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...