Javascript 如何将此http Node.Js传输到https上运行?
最近,我创建了一个使用http的NodeJS和webrtc项目。但我注意到webrtc只适用于https。那么,如何将这个基于http的节点js文件传输到基于https的节点js文件呢?请帮帮我 真的,我不知道怎么做。所以请帮我做吧。需要的是通过https运行此文件。不是在http中。如您所见,下面的代码仅使用http。由于webrtc需要在https上运行,我只需要让这个文件也在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
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)
})
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)
})