javascript - 无法渲染到 ejs 文件

标签 javascript node.js express

我正在学习 Node.js,现在我正在尝试向 JSON 写入数据或从 JSON 读取数据。我能够找到如何将数据从表单写入 JSON 文件以及如何在前端获取它们。但现在当我从表单发布新数据时遇到问题,网站应该渲染回 test.ejs 并显示消息“文件已上传”。相反,我收到错误“dataTest 未定义。

这是 View 文件夹中的 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;

我哪里出错了?

最佳答案

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

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

关于javascript - 无法渲染到 ejs 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50660610/

相关文章:

javascript - 在我的 sidenav 上启用滚动

javascript - 如何将多个相似的功能合并为一个?

JavaScript | Angular : UI Router $stateParams With Octothorpe Is Falsey

node.js - NodeJs 路由不起作用

javascript - 链接在使用 node.js 和 ejs 的多页网站中不起作用

node.js - Mongoose 子文档插入到另一个集合中,同时在父模式中保留关系

mysql - 如何使用 Express 连接 Node.js 和 MySQL 8.0?

javascript - 为什么我的数据类成员不能直接使用?

javascript - 在数组映射内使用新的 Promise

node.js - NodeJS - 访问不同模块中的变量