私はこれに2日間苦労し、グーグルでスタックオーバーフローをしましたが、解決できませんでした。
ホームページにリダイレクトするログインページを使用して、単純なノードアプリ(+ Express + Mongoose)を構築しています。サーバーのコーヒーコードは次のとおりです。
_app
.get '/', (req, res) ->
console.log "Here we are : root"
res.sendfile(__dirname + '/index.html')
.get '/login', (req, res) ->
console.log "Here we are : '/login'"
res.sendfile(__dirname + '/login.html')
.post '/credentials', (req, res) ->
console.log "Here we are : '/credentials'"
# (here comes credentials validation stuff with Mongoose)
res.redirect '/'
_
ログインページは、POST投稿されたデータが検証される/ credentialsへのリクエストを行います。これは動作します。Nodeコンソール。
次に問題が発生します。res.redirectが正しく機能しません。私はそれが「/」ルートに到達することを知っています、なぜなら:
(編集)リダイレクトはMongooseのコールバック関数内にあり、同期していません(NodeJSがそうであるように)。わかりやすくするために、Mongoose検証ツールを削除しました。
res.end()
を追加しようとしましたが、機能しません
私が試してみました
_req.method = 'get';
res.redirect('/');
_
そして
_res.writeHead(302, {location: '/'});
res.end();
_
動作しません
私は何を間違えていますか? 「/ login」ページを実際に離れ、ブラウザを「/」にリダイレクトし、受信したHTMLコードを表示するにはどうすればよいですか?
事前にご協力いただきありがとうございます:)
問題はバックエンドではなく、フロントエンドにある可能性があります。 AJAX=を使用してPOSTリクエストを送信する場合、URLを変更しないように特別に設計されています。
AJAXのリクエストが完了した後(.done()
で)window.location.href
を使用してURLを目的のパスに更新するか、リクエストからHTMLを受け取ったときにJQuery:$('body').replaceWith(data)
を使用します。
Get/routeに以下を追加します:
res.setHeader("Content-Type", "text/html")
ブラウザはファイルをダウンロードする代わりにレンダリングします
Expressを使用してNodeJSをNextJSアプリに実装する作業を行っています。この問題を抱えていて、これに遭遇しました。関数にevent.preventDefault()があり、それが送信するフォームを起動しており、リダイレクトも妨げていたため、それを削除し、それに応じてリダイレクトしていました。
Mongooseを確認するために非同期呼び出しを行っていることはほぼ確実ですが、非同期呼び出しが結果を返した後にのみリダイレクトが発生するようにコードを構造化していません。
JavaScriptでは、POST
は次のようになります。
function validateCredentials(user, callback){
// takes whatever you need to validate the visitor as `user`
// uses the `callback` when the results return from Mongoose
}
app.post('/credentials', function(req, res){
console.log("Here was are: '/credentials'";
validateCredentials(userdata, function(err, data){
if (err) {
// handle error and redirect to credentials,
// display an error page, or whatever you want to do here...
}
// if no error, redirect
res.redirect('/');
};
};
node.jsでの非同期呼び出しvs. mongoose のような質問も表示できます。