无法渲染到ejs文件

时间:2018-06-02 19:50:55

标签: javascript node.js express

我正在学习node.js,现在我正在尝试向/从JSON写入和读取数据。我能够找到如何将数据从表单写入JSON文件以及如何在前端获取它们。但是现在我在从表单发布新数据时遇到问题,站点应该回显到test.ejs并显示消息“File uploaded”。而不是我得到错误“dataTest未定义。

这是我在views文件夹中的test.ejs代码

<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 :(得分:1)

如果未定义dataTest,您应该定义它:

res.render('test', {dataTest: [], msg: 'File Uploaded!'});

答案 1 :(得分:0)

我猜这个

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

返回undefined,返回使dataTest未定义

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

所以我建议您检查dataTest是否包含有效内容。只是做

console.log(dataTest);