【问题标题】:Reload page in Node.js using Express and EJS使用 Express 和 EJS 在 Node.js 中重新加载页面
【发布时间】:2016-06-30 08:57:21
【问题描述】:

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

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>

【问题讨论】:

  • 您在浏览器中运行的哪些代码会导致刷新。您的 request.get() 请求一个页面,但不对内容做任何事情。如果您希望浏览器重新加载当前页面,您可以发出window.reload()。或者您可以使用 Ajax 获取更新的内容,然后自己将内容插入到 DOM 中。
  • @jfriend00 添加了我的 ejs 代码
  • 我还是不明白您想从网页中的哪个动作触发重新加载?这是您尚未明确提出的问题的一部分。是发给/acceptRequest 的表格吗?还是某个地方的 Ajax 调用?还是别的什么?
  • nodemon 模块最适合执行此类任务

标签: javascript node.js express ejs


【解决方案1】:

有一个东西叫HTTP Referer:它是一个HTTP头域,标识链接到被请求资源的页面地址。

如果你想刷新一个页面,在用户发送改变某些内容的请求后,只需重定向到referer。

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

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

【讨论】:

  • 但我需要在app.get 之外重新加载,所以我无法访问response
  • @AdamJohns,你想重新加载localhost:3000/ 吗?
  • @AdamJohns:有什么进展吗?你是怎么解决的?我的要求和你的一样:(
  • 这不起作用
【解决方案2】:

要重新加载 html 页面:

<script>
location.reload(true/false);
</script>

此外,您希望在进行更改时重新启动服务器,使用 nodemon 而不是 nodejs 来运行您的服务器。

安装nodemon:

npm install -g nodemon

运行服务器(app.js为主服务器文件)

nodemon apps.js

Nodemon 查找更改并在找到时重新启动服务器。

【讨论】:

  • 这个“location.reload(true/false);”太糟糕了,请不要这样做。
  • @Undefined 我不想要文件系统菜单,所以我使用了Menu.setApplicationMenu(null),但现在我无法重新加载主窗口的页面?我试过globalShortcut.register('Ctrl+R', ()=&gt;{ window.location.reload() }) 但这个obvs 不起作用。还有什么我可以做的吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 2015-08-15
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2016-10-08
相关资源
最近更新 更多