[英]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);
我必須做一些事情才能使它工作:
擺脫對res.end
的呼叫。 每當您調用res.end
,它將終止請求,因此在路由中調用之后發生的任何代碼都不會運行。
我必須為/arena
創建一條新路線。 這只會呈現您創建的arena.html
文件。 如果要將用戶“重定向”到競技場頁面,這是必需的。
我必須更新您的重定向代碼才能將用戶實際重定向到/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.