如何将用户的浏览器URL重定向到Nodejs中的其他页面?

Tan*_*aki 69 post webserver redirect http node.js

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

<form action='/?joinnew' method='post'>
  <button>Start</button>
</form>
Run Code Online (Sandbox Code Playgroud)

这是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
...
}}}
Run Code Online (Sandbox Code Playgroud)

如果有办法在我不需要知道主机地址的情况下,我会很高兴,因为这可能会改变.

'http'对象是常规需求('http'),不需要('express').

ebo*_*man 110

response.writeHead(301,
  {Location: 'http://whateverhostthiswillbe:8675/'+newRoom}
);
response.end();
Run Code Online (Sandbox Code Playgroud)

  • 在节点中,您还可以使用没有完整URL的“ response.writeHead(301,{位置:'/ path'});;”,这对于事先不知道主机名或协议的情况很有用。 (6认同)
  • 如果您不希望 Chrome 显着缓存重定向,请使用代码 307!在上面列出的情况下,返回 301 将导致浏览器始终加入同一个房间,即使您的服务器告诉它不同的/新的房间! (3认同)

Dav*_*olm 76

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

  • 为了适当的信贷...... http://stackoverflow.com/questions/7450940/automatic-https-connection-redirect-with-node-js-express (11认同)
  • 仅限快递. (5认同)
  • 没有'express'软件包,有可能做到吗? (2认同)
  • 没有回答问题 (2认同)
  • @AlexJone它确实提供了额外的有用信息。对 SO 的回应不应总是被视为独立的。 (2认同)

cis*_*iso 33

OP:"我很乐意,如果有办法,我不需要知道主机地址......"

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


agr*_*.in 6

在 Express 中您可以使用

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

从服务器重定向用户。

要包含状态代码 301 或 302,可以使用

res.redirect(301, 'http://example.com');
Run Code Online (Sandbox Code Playgroud)


vin*_*xav 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'), () => {})
Run Code Online (Sandbox Code Playgroud)