ユーザーが無効なURLを入力したときに、node.jsサーバーを取得してユーザーを404.htmlページにリダイレクトするにはどうすればよいですか?
検索を行いましたが、ほとんどの結果はExpressの結果のようですが、純粋なnode.jsでサーバーを作成したいと思います。
「間違った」URLを決定するロジックは、アプリケーションに固有です。 RESTfulアプリを実行している場合、単純なファイルが見つからないというエラーか、何か他のものである可能性があります。それがわかったら、リダイレクトの送信は次のように簡単です。
response.writeHead(302, {
'Location': 'your/404/path.html'
//add other headers here...
});
response.end();
以下を使用することができます:
res.redirect('your/404/path.html');
欠落しているファイル/リソースを示し、404ページを提供するために、リダイレクトする必要はありません。同じリクエストで、ステータスコードを404に設定し、404 HTMLページのコンテンツをレスポンス本文としてレスポンスを生成する必要があります。 Node.jsでこれを示すサンプルコードを次に示します。
var http = require('http'),
fs = require('fs'),
util = require('util'),
url = require('url');
var server = http.createServer(function(req, res) {
if(url.parse(req.url).pathname == '/') {
res.writeHead(200, {'content-type': 'text/html'});
var rs = fs.createReadStream('index.html');
util.pump(rs, res);
} else {
res.writeHead(404, {'content-type': 'text/html'});
var rs = fs.createReadStream('404.html');
util.pump(rs, res);
}
});
server.listen(8080);
res.writeHead(404, {'Content-Type': 'text/plain'}); // <- redirect
res.write("Looked everywhere, but couldn't find that page at all!\n"); // <- content!
res.end(); // that's all!
res.writeHead(302, {'Location': 'https://example.com' + req.url});
res.end();
whereを考慮するだけです(たとえば、httpリクエストの場合のみ)。したがって、無限のリダイレクトを取得しません;-)
デフォルトの404を使用して、switchステートメントを使用しました。
var fs = require("fs");
var http = require("http");
function send404Response (response){
response.writeHead(404, {"Content-Type": "text/html"});
fs.createReadStream("./path/to/404.html").pipe(response);
}
function onRequest (request, response){
switch (request.url){
case "/page1":
//statements
break;
case "/page2":
//statements
break;
default:
//if no 'match' is found
send404Response(response);
break;
}
}
http.createServer(onRequest).listen(8080);
これを試して:
this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();
次のコードを使用する必要があります。
response.writeHead(302 , {
'Location' : '/view/index.html' // This is your url which you want
});
response.end();