使用静态文件在Express中进行简单重定向

时间:2017-01-20 16:21:17

标签: javascript node.js express

我是Node和Express的新手。 我有一个静态的html页面,用户通过ajax将他的用户名发布到我的服务器上。然后我想将他重定向到另一个html文件。

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

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(__dirname + "/public/arena.html"));

app.get('/',function(req,res){
  res.sendFile(__dirname + "/public/index.html");
});
app.post('/login',function(req,res){
  var username=req.body.username;
  console.log("User name = "+username);
  res.redirect(__dirname + "/public/arena.html");
});

var server = app.listen(3000);

我在浏览器中获得了用户名和响应,但服务器没有将我重定向到arena.html。我也没有任何错误。

为什么这些"容易" Node中的事情如此困难?

非常感谢你们的帮助。

3 个答案:

答案 0 :(得分:3)

在这种情况下的问题是看起来你的POST路由中插入了一些测试(调试?)代码,这些代码正在停止重定向调用的运行。

以下是程序的修改(更正)版本,以您希望的方式重定向用户:

var express = require("express");
var bodyParser = require("body-parser");

var app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(__dirname + "/public/arena.html"));

app.get('/', function(req, res) {
  res.sendFile(__dirname + "/public/index.html");
});

app.get('/arena', function(req, res) {
  res.sendFile(__dirname + "/public/arena.html");
});

app.post('/login', function(req, res) {
  var username = req.body.username;
  console.log("User name = " + username);

  // Note how I'm redirecting the user to the /arena URL.
  // When you issue a redirect, you MUST redirect the user
  // to a webpage on your site. You can't redirect them to
  // a file you have on your disk.
  res.redirect("/arena");
});

app.listen(3000);

我必须做几件事才能让这个工作:

  1. 摆脱对res.end的号召。每当你拨打res.end时,它都会终止请求,因此在该路由中的该呼叫之后发生的任何代码都将无法运行。

  2. 我必须为/arena创建新路线。这只会呈现您创建的arena.html文件。如果您想要将用户“重定向”到竞技场页面,则需要这样做。

  3. 我必须更新您的重定向代码才能将用户重定向到/arena(我在步骤2中创建的新路线),以便用户点击/arena路线,最后找回你想要展示的模板。

答案 1 :(得分:0)

您的res.redirect函数永远不会被执行,因为您正在该语句之前从函数返回。

答案 2 :(得分:0)

您将网址传递给res.redirect()。该URL应该是一个具有适当路由的URL,该URL将提供所需的文件。

相反,你正在做:

res.redirect(__dirname + "/public/arena.html");

但是,这根本不是一个URL。这是本地硬盘上的路径名。 res.redirect()将URL返回给浏览器,如果浏览器正在关注重定向,则会从头开始请求该URL作为分支新请求。因此,您需要发送一个URL(而不是路径),并且您需要发送一个URL,该URL具有为其配置的路由,以便提供所需的文件。

您的express.static()语句似乎也可能不正确。对于我们更具体地帮助我们,我们需要知道相对于__dirname的硬盘驱动器上的静态HTML文件的位置,我们需要确切地知道您希望URL如何工作。例如,您是否希望请求/arena.html投放__dirname + /public/arena.html?那是你想要做的吗?请解释该部分,以便我们更具体地就您的express.static()声明提出建议。

如果是这种情况,那么您可以将重定向更改为:

res.redirect("/arena.html");