在更改时重新加载Json文件

时间:2016-07-14 02:15:31

标签: javascript json node.js

我正在使用Nodejs Express。我正在尝试将列表用户从数据库显示到网页。所以我创建了一个中间json文件来存储所有用户详细信息,然后用它来显示在网页中。服务器端代码更新关于任何新条目或删除的json文件和数据库,但数据未反映在网页中。一旦我重新启动服务器,它就会反映出来。

Server.js

app.post('/add', function (req, res) {
new employee({
    id    : req.body.id,
    firstName : req.body.firstName,
    lastName : req.body.lastName,
    emailId    : req.body.emailId
}).save( function ( err, employee, count ){
    if( err ) return next( err );
});
var db = new json("user-list",true,false);  
var count = db.getData('/count');

//console.log(result[item].firstName)
db.push('/user/'+count+'/firstName',req.body.firstName);
db.push('/user/'+count+'/lastName',req.body.lastName);
db.push('/user/'+count+'/emailId',req.body.emailId);
db.push('/user/'+count+'/id',req.body.id)
db.push('/count',count+1);
db.save();
db.reload();
res.redirect( '/Webpage' );
});

Webpage.js

var users = require('../user-list.json');
router.get('/', function(req, res, next) {

res.render('Webpage', {
    title: 'Express' ,
    user : users.user
});
});

网页.jjs:

<% for(var item in user) { %>
    <tr>
    <td><%= user[item].id %></td>
    <td><%= user[item].firstName %></td>
    <td><%= user[item].lastName %></td>
    <td><%= user[item].emailId %></td>
    <td>
    <span onclick="editUser()" class="glyphicon glyphicon-edit"></span>
    <span onclick="deleteUser(<%= user[item].id %>)" class="glyphicon glyphicon-remove"></span>
    </td>
    </tr>
<% }%>

如果有任何更改,我如何获取网页中显示的数据?我已经浏览了一段时间,没有找到任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为问题是:

var users = require('../user-list.json');

Node中的应用程序不会重新加载javascript源文件。反过来,源文件需要工作的任何内容将以这种方式加载 - 仅在启动时。

为了按请求读取文件,您需要在router.get('/', function(req, res, next) { ... } )内手动读取文件(使用节点中的文件IO命令) - 因为这个是运行的代码每页加载,而不是它上面的代码。

所以网页.js应该是这样的:

var fs = require('fs'); // new
router.get('/', function(req, res, next) {
var users = JSON.parse(fs.readFileSync('../user-list.json', 'utf8'));
res.render('Webpage', {
    title: 'Express' ,
    user : users.user
});
});