2017-02-23 23 views
0

私はNode.js + MongoDBと他の関連ツールの基礎を学んでいますが、私は簡単なログイン画面で立ち往生しています。 index.htmlにリダイレクトするために "welcome!"というテキストだけが与えられています。私は別の場所(公式のAPI、チュートリアル、このページなど)を見てきましたが、私のエラーはまだ見えません。ノードJSでエクスプレスでリダイレクトすることができません

これが私のサーバーである:非既存の信任状をしようとしたとき、私は成功したエラー文字列「invalid_credentials」を返すことができ

$.ajax({ 
    url: "/doLogin", 
    type: "GET", 
    data: { 
     user: $("#user").val().trim(), 
     pass: $("#pass").val() 
    } 
}).done(function(data, textStatus, jqXHR) { 
    if(data == "invalid_credentials") { 
     $("#alert-wrong-credentials").show(100); 
    } else if(data == "ok") { 
     $("#alert-wrong-credentials").hide(); 
    } 
}).fail(function(jqXHR, textStatus, errorThrown) { 
    console.log(errorThrown); 
}); 

、および:

var http = require('http'); 
var hostname = 'localhost'; 
var port = 3000; 

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

const HOME_URL = "/"; 
const LOGIN_URL = "/login"; 
const LOGIN_ACTION_URL = "/doLogin"; 
const INDEX_URL = "/index"; 

var app = express(); 
var db = mongojs("gus:[email protected]:27017/awesomeapp"); 

app.set("views", __dirname + "/public/views"); 
app.engine('html', require('ejs').renderFile); 

app.get(HOME_URL, function(request, response) { 
    response.redirect(LOGIN_URL); 
}); 

app.get(LOGIN_URL, function(request, response) { 
    response.render("login.html"); 
}); 

app.get(INDEX_URL, function(request, response) { 
    response.render("index.html"); 
}); 

app.get(LOGIN_ACTION_URL, function(request, response) { 
    db.users.find({ 
     user: request.query.user, 
     pass: request.query.pass 
    }, function(err, doc) { 
     if(err) { 
      console.log(JSON.stringify(err)); 
      response.end("An error ocurred"); 
      return; 
     } 

     if(doc.length == 0) { 
      console.log("invalid_credentials"); 
      response.end("invalid_credentials"); 
      return; 
     } 

     console.log("user found: " + JSON.stringify(doc)); 

     // This is my problem: 
     response.redirect(INDEX_URL); 
    }); 
}); 

app.listen(port); 

、これは、ログインビューで行われます

user found: [{"_id":"58af514cb63980d2e8a51fed","user":"gus","pass":"123"}] 

私は正しいユーザーデータを見ることができますindex.htmlページに直接アクセスしてください。

+0

あなたが使用しようとしているリダイレクトは、ページにアクセスしている場合にのみ機能します。しかし、あなたはAjax経由でリクエストしています。つまり、 'date ==" ok "ブロックで、クライアントでリダイレクトする必要があります。document.location.href =" ... "' –

+0

を@NikxDaに渡すと、何も起こりません。クリスGはまったく正しいです、私は非同期要求をして、バックにリダイレクトしようとしていますが、それは実際には意味がありません、私は "ok"フラグをクライアントとして提案してリダイレクトして、ほんとありがと! – Gustavo

+0

私は完全にそれを逃した。恥ずかしい:D – NikxDa

答えて

1

ログインが完了すると、クライアント側でリダイレクトを処理する必要があります。実際にLOGIN_ACTION_URLにアクセスしている場合は、リダイレクトが機能します。

if(data == "invalid_credentials") { 
     $("#alert-wrong-credentials").show(100); 
    } else if(data == "ok") { 
     // Redirect 
     window.location.href = "index_url"; 
    } 

また、同様の質問があるNode.js Page Redirect on AJAX login? With a function call after redirect?もあります。

+0

これは、ありがとう! – Gustavo

0

Ajaxの呼び出しは、現在のブラウザのページに影響しません。あなたはサーバーに要求を送信します。あなたは応答を得る。あなたは現在、ブラウザのページに変更したい場合は、Ajaxのレスポンスを見Javascriptを記述する必要があり、その後、設定することにより、現在のブラウザのページを変更します。

window.location = someURL; 

をので、やってres.redirect()を受けてAJAX呼び出しにajax呼び出しに302ステータスを返します。それでおしまい。 ajax呼び出しで現在のブラウザページを変更するためのインジケータとして使用する場合は、302レスポンスを探してレスポンスから正しいヘッダを取得し、window.locationを変更するコードを記述する必要があります。 Ajaxコールから自動化された方法はありません。

ブラウザがURL用のWebページを要求し、Webページを読み込むときに302を取得すると、その時点でリダイレクトされます。しかし、Ajaxコールではありません。 AJAXの呼び出しは、それが何であれ、応答を取得します。応答を処理して実際に何かを行うのはコードに任されています。

+0

そうですね、ここでは基本的なことだけを忘れているようです。ありがとう! – Gustavo

関連する問題