簡體   English   中英

在Express中使用靜態文件進行簡單重定向

[英]Simple redirect in Express with static file

我是Node and 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中如此困難?

非常感謝你們的幫助。

在這種情況下,問題在於您似乎已將一些測試(調試?)代碼插入到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路由,最后取回您要向他們展示的模板。

res.redirect函數永遠不會執行,因為您正從該語句之前的函數返回。

您將URL傳遞給res.redirect() 該URL應該是您具有適當路由的URL,該URL將提供所需的文件。

相反,您正在做:

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

但是,那根本不是URL。 那是您本地硬盤上的路徑名。 res.redirect()將URL發送回瀏覽器,如果瀏覽器跟隨重定向,它將從頭開始請求該URL作為分支新請求。 因此,您需要發送一個URL(而不是路徑),並且您需要發送一個URL,您已為其配置了可以提供所需文件的路由。

看起來您的express.static()語句可能不正確。 為了使我們能夠更具體地提供幫助,我們需要了解靜態HTML文件在硬盤驅動器上相對於__dirname ,並且需要確切地了解您希望它們的URL如何工作。 例如,是否要請求/arena.html來提供__dirname + /public/arena.html 那是你想做的嗎? 請說明這一部分,以便我們在您的express.static()語句上提供更具體的建議。

如果是這種情況,則可以將重定向更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM