2017-01-20 13 views
1

私はNodeとExpressを初めて使用しています。 私は静的なhtmlページを持っています。そこでは、ユーザーが自分のユーザー名をajax経由で自分のサーバーに投稿します。次に、彼を別のhtmlファイルにリダイレクトしたいと思います。Expressでの静的ファイルによる単純なリダイレクト

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でこれらの「簡単な」ものがなぜ難しいのですか?

ご協力いただきありがとうございます。

+0

'リターンres.end(「乗って歓迎」);あなたは、関数から戻っているようにあなたが実行する前に、'それが見えますリダイレクトコマンド(???)。あなたがウェブサイト上のパスの代わりにファイルシステム上のパスにユーザをリダイレクトしようとしているので、コードが実行されると404が起きると思われます。 – RyanWilcox

+0

res.redirect()の前にリターン関数を書きません。あなたの関数が既に返ってきてからの目的です。 – syarul

+0

あなたの質問に答えましたか? – jfriend00

答えて

2

この場合、リダイレクトコールの実行を停止している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の新しいルートを作成する必要がありました。これで、作成した​​ファイルがレンダリングされます。ユーザーをアリーナページにリダイレクトする場合は、これが必要です。

  3. は、私は、ユーザーが、あなたの/arenaルートにヒットするように、実際に/arena(私はステップ2で作成した新しいルート)にユーザーをリダイレクトするためにあなたのリダイレクトコードを更新しなければならなかった、そして最終的にあなたがしようとしているテンプレートを取り戻しますそれらを表示する。

0

res.redirect関数は、その文の直前の関数から戻るため実行されません。

+0

申し訳ありませんが、これはデバッグのためにコードに残されています。 – a1xon

0

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"); 
関連する問題