Nodejs -重定向url

gupuwyp2  于 2023-01-08  发布在  Node.js
关注(0)|答案(9)|浏览(185)

当用户输入无效的url时,如何让node.js服务器将用户重定向到404.html页面?
我做了一些搜索,看起来大多数结果都是针对Express的,但我想用纯node.js编写我的服务器。

7xllpg7q

7xllpg7q1#

我使用了switch语句,默认值为404:

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);
u4dcyp6a

u4dcyp6a2#

您必须使用以下代码:

response.writeHead(302 , {
           'Location' : '/view/index.html' // This is your url which you want
        });
response.end();
kx7yvsdv

kx7yvsdv3#

使用以下代码,这在Native Nodejs中运行良好

http.createServer(function (req, res) {
var q = url.parse(req.url, true);
if (q.pathname === '/') {
  //Home page code
} else if (q.pathname === '/redirect-to-google') {
  res.writeHead(301, { "Location": "http://google.com/" });
  return res.end();
} else if (q.pathname === '/redirect-to-interal-page') {
  res.writeHead(301, { "Location": "/path/within/site" });
  return res.end();
} else {
    //404 page code
}
res.end();
}).listen(8080);
pkwftd7m

pkwftd7m4#

使用

res.redirect('/path/404.html');

也可以重定向到任何定义的URI

res.redirect('/');
46qrfjad

46qrfjad5#

确定“错误”url的逻辑是特定于应用程序的。如果您正在执行RESTful应用程序,它可能是一个简单的文件未找到错误或其他错误。一旦您弄清楚了这一点,发送重定向就像下面这样简单:

response.writeHead(302, {
  'Location': 'your/404/path.html'
  //add other headers here...
});
response.end();
qc6wkl3g

qc6wkl3g6#

如果您正在使用ExpressJS,则可以用途:

res.redirect('your/404/path.html');
mo49yndu

mo49yndu7#

要指出丢失的文件/资源并提供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);
q9rjltbz

q9rjltbz8#

404(含内容物/主体)

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!

重定向至Https

res.writeHead(302, {'Location': 'https://example.com' + req.url});
res.end();

只要考虑一下你在哪里使用它(例如,只用于http请求),这样你就不会得到无休止的重定向; -)

cygmwpex

cygmwpex9#

试试这个:

this.statusCode = 302;
this.setHeader('Location', '/url/to/redirect');
this.end();

相关问题