无法呈现给ejs文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (89)

我正在学习node.js,现在我正在尝试将数据写入JSON或从JSON读取数据。我能够了解如何将数据从表单写入JSON文件,以及如何将数据写入前端。但是现在我遇到了一个问题,当我从表单中发布新数据时,Site应该将其呈现回test.ejs,并带有“文件上传”的消息。而不是我得到错误“数据测试是没有定义的。

这是我的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;

我在哪里搞错了?

提问于
用户回答回答于

我猜这个

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

返回未定义的,作为回报,使dataTest未定义

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

所以我建议你检查一下dataTest包含一个有效的内容。只需做

console.log(dataTest);
用户回答回答于

如果dataTest没有定义,可能应该定义它:

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励