使用Express和EJS在Node.js中重新加载页面

3

当底层数据模型发生变化时,我想要重新加载浏览器页面:

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

app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: false }));

var requests;

app.get('/', function(req, res) {
    res.render('index', {
        requests: requests
    });
});

app.listen(3000);

...以及当请求数据模型发生变化时:

request.get('localhost:3000/', function(error, response, body) {
    console.log(body);
});

但是我的浏览器页面不会自动刷新,除非我手动用鼠标点击刷新按钮。我错过了什么吗?
编辑:这是我的index.ejs代码:
<!DOCTYPE html>
<html>

<ul>
    <% requests.forEach(function(match) { %>
        <form action="/acceptRequest" method="post" enctype="application/x-www-form-urlencoded">
            <input type="text" name="id" value="<%= match.id %>">
            <input type="text" name="fighter1" value="<%= match.fighter1 %>"> vs.
            <input type="text" name="fighter2" value="<%= match.fighter2 %>"> on
            <input type="text" name="fightdate" value="<%= match.date %>"> in
            <input type="text" name="rounds" value="">
            <input type="submit" value="Submit">
        </form>
        <br>
        <% }); %>
</ul>

</html>

1
你在浏览器中运行的代码会导致刷新吗?你的 request.get() 请求了一个页面,但没有对内容做任何处理。如果你想让浏览器重新加载当前页面,可以直接使用 window.reload()。或者你可以通过 Ajax 获取更新的内容,然后自己将内容插入到 DOM 中。 - jfriend00
@jfriend00 添加了我的 EJS 代码。 - Adam Johns
我仍然不明白您想从网页中触发重新加载的动作是什么?这是您问题中没有澄清的部分。是向/acceptRequest提交表单吗?还是在某个地方进行Ajax调用?或者其他什么? - jfriend00
nodemon 模块是最适合执行此类任务的。 - Alok Deshwal
2个回答

2

有一个叫做 HTTP Referer 的东西:它是一个HTTP头字段,用于标识链接到所请求资源的页面的地址。

如果您想在用户发送更改请求后刷新页面,请重定向到引用页。

app.get('/someRequest', function(request, response) {

    // some things changed here.
    response.redirect(request.get('referer'));
});

但是我需要在app.get之外重新加载,因此我无法访问response - Adam Johns
@AdamJohns,你想重新加载 localhost:3000/ 吗? - Akshay Arora
@AdamJohns:有进展了吗?你是怎么解决的?我的需求和你一样 :( - Ipsita Rout
这个不起作用。 - apYan

2
重新加载HTML页面的方法如下:
<script>
location.reload(true/false);
</script>

如果你希望在修改代码后自动重启服务器,那么可以使用nodemon代替nodejs来运行服务器。

安装nodemon的方法如下:

npm install -g nodemon

要运行服务器,请使用 app.js 作为主服务器文件。

nodemon apps.js

Nodemon会监测变化,一旦发现变化就会重新启动服务器。


4
这个 "location.reload(true/false);" 很糟糕,请不要使用。 - frontsideup
@Undefined 我不想要一个文件系统菜单,所以我使用了 Menu.setApplicationMenu(null),但现在我没有办法重新加载主窗口的页面?我尝试过 globalShortcut.register('Ctrl+R', ()=>{ window.location.reload() }),但这显然不起作用。我还能做些什么吗? - oldboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接