【问题标题】:How to redirect user's browser URL to a different page in Nodejs?如何将用户的浏览器 URL 重定向到 Nodejs 中的不同页面?
【发布时间】:2012-07-06 12:12:54
【问题描述】:

在我尝试编写的应用程序中,主页 (http://localhost:8675) 具有以下形式:

<form action='/?joinnew' method='post'>
  <button>Start</button>
</form>

这是 server.js 中的代码:

http.createServer(function(request, response) {
  var root = url.parse(request.url).pathname.split('/')[1];
  if (root == '') {
    var query = url.parse(request.url).search:
    if (query == '?joinnew') {
      var newRoom = getAvaliableRoomId(); // '8dn1u', 'idjh1', '8jm84', etc.
      // redirect the user's web browser to a new url
      // ??? How to do.  Need to redirect to 'http://whateverhostthiswillbe:8675/'+newRoom
...
}}}

如果有办法让我不必知道主机地址,我会很高兴,因为这可能会改变。

'http' 对象是常规的 require('http'),而不是 require('express')。

【问题讨论】:

    标签: http node.js redirect post webserver


    【解决方案1】:

    为了实现重定向,您发送一个重定向状态(301 表示永久重定向,302 表示“这当前存在于...”重定向,307 表示有意临时重定向):

    response.writeHead(301, {
      Location: `http://whateverhostthiswillbe:8675/${newRoom}`
    }).end();
    

    【讨论】:

    • 在节点中你也可以使用response.writeHead(301, { Location: '/path' });而不需要完整的URL,当你事先不知道主机名或协议时很有用。
    • 如果您不希望 chrome 出色地缓存重定向,请使用代码 307!在上面列出的情况下,返回 301 将导致浏览器始终加入同一个房间,即使您的服务器会告诉它另一个/新房间!
    • 嗨,反向重定向呢?从远程 url 到本地主机页面?
    • 但请注意,您几乎肯定想要 302,而不是 301,这样浏览器就不会硬缓存重定向。因为如果确实如此,即使您取消该重定向,它也会坚持使用它。你说它是永久的,浏览器相信你。
    【解决方案2】:

    对于那些(与 OP 不同)使用 express 库的人:

    http.get('*',function(req,res){  
        res.redirect('http://exmple.com'+req.url)
    })
    

    【讨论】:

    • 对于适当的信用...stackoverflow.com/questions/7450940/…
    • 没有'express'包可以吗?
    • 谢谢。这就是我需要的
    • 不回答问题
    • @AlexJone 它确实提供了额外的有用信息。不应始终将对 SO 的响应视为独立的。
    【解决方案3】:

    OP:“如果有一种方法可以让我不必知道主机地址,我会很高兴......”

    response.writeHead(301, {
      Location: "http" + (request.socket.encrypted ? "s" : "") + "://" + 
        request.headers.host + newRoom
    });
    response.end();
    

    【讨论】:

      【解决方案4】:

      在 Express 中你可以使用

      res.redirect('http://example.com');

      从服务器重定向用户。

      可以使用状态码 301 或 302

      res.redirect(301, 'http://example.com');
      

      【讨论】:

        【解决方案5】:

        如果您使用的是Express,那么最干净的完整答案就是这个

        const express = require('express')
        const app     = express()
        
        app.get('*', (req, res) => {
          // REDIRECT goes here
          res.redirect('https://www.YOUR_URL.com/')
        })
        
        app.set('port', (process.env.PORT || 3000))
        const server = app.listen(app.get('port'), () => {})
        

        【讨论】:

          【解决方案6】:

          您可以使用 res.render() 或 res.redirect() 方法使用 node.js express 重定向到另一个页面

          例如:

          var bodyParser = require('body-parser');
          var express = require('express');
          var navigator = require('web-midi-api');
          var app = express();
          
          app.use(express.static(__dirname + '/'));
          app.use(bodyParser.urlencoded({extend:true}));
          app.engine('html', require('ejs').renderFile);
          app.set('view engine', 'html');
          app.set('views', __dirname);
          
          app.get('/', function(req, res){
              res.render("index");
          });
          
          //This reponds a post request for the login page
          app.post('/login', function (req, res) {
              console.log("Got a POST request for the login");
              var data = {
                  "email": req.body.email,
                  "password": req.body.password
              };
          
              console.log(data);
          
              //Data insertion code
              var MongoClient = require('mongodb').MongoClient;
              var url = "mongodb://localhost:27017/";
          
              MongoClient.connect(url, function(err, db) {
                  if (err) throw err;
                  var dbo = db.db("college");
                  var query = { email: data.email };
                  dbo.collection("user").find(query).toArray(function(err, result) {
                      if (err) throw err;
                      console.log(result);
                      if(result[0].password == data.password)
          
          
           res.redirect('dashboard.html');
                      else
          
          
           res.redirect('login-error.html');
                      db.close();
                  });
              });
          
          });
          
          
          // This responds a POST request for the add user
          app.post('/insert', function (req, res) {
              console.log("Got a POST request for the add user");
          
              var data = {
                  "first_name" : req.body.firstName,
                  "second_name" : req.body.secondName,
                  "organization" : req.body.organization,
                  "email": req.body.email,
                  "mobile" : req.body.mobile,
              };
          
              console.log(data);
          
              **res.render('success.html',{email:data.email,password:data.password});**
          
          });
          
          
          //make sure that Service Workers are supported.
          if (navigator.serviceWorker) {
              navigator.serviceWorker.register('service-worker.js', {scope: '/'})
                  .then(function (registration) {
                      console.log(registration);
                  })
                  .catch(function (e) {
                      console.error(e);
                  })
          } else {
              console.log('Service Worker is not supported in this browser.');
          }
          
          
          // TODO add service worker code here
          if ('serviceWorker' in navigator) {
              navigator.serviceWorker
                  .register('service-worker.js')
                  .then(function() { console.log('Service Worker Registered'); });
          }
          
          var server = app.listen(63342, function () {
          
              var host = server.address().host;
              var port = server.address().port;
          
              console.log("Example app listening at http://localhost:%s", port)
          });
          

          在登录部分,如果数据库中的电子邮件和密码匹配,则该站点将被定向到 dashbaord.html 否则我们将使用 res.redirect() 方法显示 page-error.html。您也可以使用 res.render() 在 node.js 中渲染页面

          【讨论】:

            猜你喜欢
            • 2013-01-23
            • 2018-11-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-23
            • 1970-01-01
            • 2017-01-21
            • 1970-01-01
            相关资源
            最近更新 更多