【问题标题】:nodejs/expressjs redirect does not worknodejs/expressjs 重定向不起作用
【发布时间】:2016-12-20 11:35:14
【问题描述】:

我尝试在 expressjs 中提供具有重定向功能的网页。但它不知何故无法工作。我一定对这里的某些事情感到愚蠢。

index.html:

<html>

<body>
    <div id="clicked"> not clicked </div>
</body>

</html>

server.js:

var express = require("express");
var app     = express();

app.get('/', function(req, res) {
    console.log("reached root!");
    res.redirect("index.html");
});
app.listen(9876);

两个文件都在同一个目录中。我可以在浏览器控制台上看到日志“到达日志”,但出现 404 错误:“无法获取 /index.html”。 但是,如果我重定向到外部网页,它可以工作。如果我改变 "res.redirect("index.html");"到"res.redirect("http://google.com");",就可以完美运行了。

【问题讨论】:

标签: node.js redirect express


【解决方案1】:

node.js 默认不提供任何文件。因此,硬盘上的文件无关紧要。如果没有提供这些文件的路径,Express 将永远不会发送它们。

因此,如果您要重定向到 /index.html,那么您需要一个路由来处理该请求。正如您的服务器现在一样,该请求将生成 404(找不到路由/文件)。

var express = require("express");
var app     = express();

app.get('/', function(req, res) {
    console.log("reached root!");
    res.redirect("/index.html");
});
app.get('/index.html', function(req, res) {
    console.log("reached root!");
    res.sendFile("index.html");
});
app.listen(9876);

也许您想要做的只是渲染“index.html”而不进行重定向。这可能适用于您拥有的一条路线。

var express = require("express");
var app     = express();

app.get('/', function(req, res) {
    console.log("reached root!");
    res.sendFile("index.html");
});
app.listen(9876);

这些示例假定文件 index.html 位于 app 目录中。如果它位于其他位置,则需要适当调整sendFile() 的路径。

对于静态文件,您还可以使用express.static() 自动提供整个目录的文件。详情请见express.static() doc

【讨论】:

  • 我有点听不懂你说的。你想用一个例子来详细说明吗?谢谢。
  • @derek - 以后有什么不懂的请解释一下。默认情况下,node.js 不提供任何文件,因此没有支持的路由将无法正常工作。我不知道还能说什么。我已经添加了代码示例。
  • 我缺少的关键点是,如果您想重定向到某个页面,则必须路由该页面。
【解决方案2】:

我不确定,但我认为您可能想要使用 res.sendFile 而不是重定向到另一个 url。查看 api 了解详细信息: http://expressjs.com/en/api.html

【讨论】:

    猜你喜欢
    • 2016-04-08
    • 2020-06-27
    • 2013-07-31
    • 2018-02-11
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多