Javascript 如何将此http Node.Js传输到https上运行?

Javascript 如何将此http Node.Js传输到https上运行?,javascript,php,node.js,https,webrtc,Javascript,Php,Node.js,Https,Webrtc,最近,我创建了一个使用http的NodeJS和webrtc项目。但我注意到webrtc只适用于https。那么,如何将这个基于http的节点js文件传输到基于https的节点js文件呢?请帮帮我 真的,我不知道怎么做。所以请帮我做吧。需要的是通过https运行此文件。不是在http中。如您所见,下面的代码仅使用http。由于webrtc需要在https上运行,我只需要让这个文件也在https上运行 var hat = require('hat') var http = require('http

最近,我创建了一个使用http的NodeJS和webrtc项目。但我注意到webrtc只适用于https。那么,如何将这个基于http的节点js文件传输到基于https的节点js文件呢?请帮帮我

真的,我不知道怎么做。所以请帮我做吧。需要的是通过https运行此文件。不是在http中。如您所见,下面的代码仅使用http。由于webrtc需要在https上运行,我只需要让这个文件也在https上运行

var hat = require('hat')
var http = require('http')
var nodeStatic = require('node-static')
var ws = require('ws')

var PORT = process.argv[2] || 4000

var httpServer = http.createServer()
var staticServer = new nodeStatic.Server('./public')
var wsServer = new ws.Server({ server: httpServer })

var peers = {}
var waitingId = null
var count = 0

httpServer.on('request', function (req, res) {
  req.addListener('end', function () {
    staticServer.serve(req, res)
  }).resume()
})

wsServer.on('connection', onconnection)

function onconnection (peer) {
  var send = peer.send
  peer.send = function () {
    try {
      send.apply(peer, arguments)
    } catch (err) {}
  }

  peer.id = hat()
  peers[peer.id] = peer
  peer.on('close', onclose.bind(peer))
  peer.on('error', onclose.bind(peer))
  peer.on('message', onmessage.bind(peer))
  count += 1
  broadcast(JSON.stringify({ type: 'count', data: count }))
}

function onclose () {
  peers[this.id] = null
  if (this.id === waitingId) {
    waitingId = null
  }
  if (this.peerId) {
    var peer = peers[this.peerId]
    peer.peerId = null
    peer.send(JSON.stringify({ type: 'end' }), onsend)
  }
  count -= 1
  broadcast(JSON.stringify({ type: 'count', data: count }))
}

function onmessage (data) {
  console.log('[' + this.id + ' receive] ' + data + '\n')
  try {
    var message = JSON.parse(data)
  } catch (err) {
    console.error('Discarding non-JSON message: ' + err)
    return
  }

  if (message.type === 'peer') {
    if (waitingId && waitingId !== this.id) {
      var peer = peers[waitingId]

      this.peerId = peer.id
      peer.peerId = this.id

      this.send(JSON.stringify({
        type: 'peer',
        data: {
          initiator: true
        }
      }), onsend)

      peer.send(JSON.stringify({
        type: 'peer'
      }), onsend)

      waitingId = null
    } else {
      waitingId = this.id
    }
  } else if (message.type === 'signal') {
    if (!this.peerId) return console.error('unexpected `signal` message')
    var peer = peers[this.peerId]
    peer.send(JSON.stringify({ type: 'signal', data: message.data }))
  } else if (message.type === 'end') {
    if (!this.peerId) return console.error('unexpected `end` message')
    var peer = peers[this.peerId]
    peer.peerId = null
    this.peerId = null
    peer.send(JSON.stringify({ type: 'end' }), onsend)
  } else {
    console.error('unknown message `type` ' + message.type)
  }
}

function onsend (err) {
  if (err) console.error(err.stack || err.message || err)
}

function broadcast (message) {
  for (var id in peers) {
    var peer = peers[id]
    if (peer) {
      peer.send(message)
    }
  }
}

httpServer.listen(PORT, function () {
  console.log('Listening on port ' + PORT)
})
  • 以低于$15.00/年(for.com)的价格注册站点域,包括whois保护
  • 创建一个免费的Cloudflare帐户并设置您的新域名,将DNS配置为代理并处理您计划在该域下托管的IP
  • 通过cloudflare SSL密钥生成证书,并在项目中使用证书。只要DNS路由说您的家庭IP或服务器IP,它就会保持HTTPS
  • 出于测试目的,您可以使用假密钥/证书,但在遵循上述步骤之前,这将始终显示不安全

    在NodeJS中使用HTTPS:

    consthttps=require('HTTPS');
    const FILESYSTEM=require('fs');
    //在此处创建HTTP应用程序,然后为该应用程序创建HTTPS服务器
    
    HTTPS.createServer({key:FILESYSTEM.readFileSync(uu dirname+'/certs/key.pem'),cert:FILESYSTEM.readFileSync(uu dirname+'/certs/cert.pem')),app。)监听(443)HTTPS需要与域名匹配的安全证书。域名和生产使用证书都可以在线购买,并且有有效期,需要更新

    证书包含两个文件
    cert.pem
    key.pem

    对于本地开发,可以为
    localhost
    域生成自签名的不受信任证书(通过openssl命令行工具)

    原始代码可以从“http”更新为“https”,这两个文件需要作为选项加载并传递到
    https.createServer()

    我还必须更新对“node static”的调用,因为它不提供本地文件

    var hat = require('hat')
    var https = require('https') // updated
    const fs = require('fs');
    var nodeStatic = require('node-static')
    var ws = require('ws')
    
    var PORT = process.argv[2] || 4000
    
    const options = {
      key: fs.readFileSync('key.pem'),
      cert: fs.readFileSync('cert.pem')
    };
    
    var httpServer = https.createServer(options) // updated
    var staticServer = new nodeStatic.Server('./public')
    var wsServer = new ws.Server({ server: httpServer })
    
    var peers = {}
    var waitingId = null
    var count = 0
    
    httpServer.on('request', function (req, res) { // updated
      staticServer.serve(req, res)
    })
    
    // the rest of the original code
    // httpServer variable is now an HTTPS server instance
    
    
    httpServer.listen(PORT, function () {
      console.log('Listening on port ' + PORT)
    })
    

    启动服务器并访问https://localhost:4000 将提示您必须确认的不受信任证书警告。

    请改用nodejs包。您能告诉我如何使用
    require('https')
    ,它与
    require('http')具有相同的API。
    。您需要将HTTPS证书和密钥作为选项传递给
    createServer()
    调用。看见有关生成自签名证书的详细信息,请参阅,这样可以吗?node js可以正常工作吗?我不能将所有http都重命名为https吗?但是在你的代码node js不能正常工作之后…它在https上运行,但是node js不能正常工作。到底什么东西不能工作?我能够测试为静态文件服务的节点静态,但没有测试ws(WebSocket)。还请说明您正在使用的节点的版本(
    node-v
    )。
    var hat = require('hat')
    var https = require('https') // updated
    const fs = require('fs');
    var nodeStatic = require('node-static')
    var ws = require('ws')
    
    var PORT = process.argv[2] || 4000
    
    const options = {
      key: fs.readFileSync('key.pem'),
      cert: fs.readFileSync('cert.pem')
    };
    
    var httpServer = https.createServer(options) // updated
    var staticServer = new nodeStatic.Server('./public')
    var wsServer = new ws.Server({ server: httpServer })
    
    var peers = {}
    var waitingId = null
    var count = 0
    
    httpServer.on('request', function (req, res) { // updated
      staticServer.serve(req, res)
    })
    
    // the rest of the original code
    // httpServer variable is now an HTTPS server instance
    
    
    httpServer.listen(PORT, function () {
      console.log('Listening on port ' + PORT)
    })