我正在使用ExpressJS(4.17.1)作为中间件运行NodeJS(LTS12.18.1)app。
我试图在on“Upgrade”事件侦听器中获取“sec-websocket-key”的http头值。 下面是server.js文件的代码
const express = require('express')
const app = express()
const crypto = require('crypto')
const parser = require('body-parser')
const compression = require('compression')
const server = require('http').createServer(app)
server.on('upgrade', (req, socket, head) => {
let key = req.getHeader('Sec-WebSocket-Key')
let conc = key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
let hash = crypto.createHash('sha1')
hash.update(conc)
let encoded_data = hash.digest('base64')
socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: websocket\r\n' +
'Connection: Upgrade\r\n' +
'Sec-WebSocket-Accept: ' + encoded_data + '\r\n' +
'\r\n')
socket.pipe(socket) // echo back
})
const io = require('socket.io')(server)
app.get('/',(req,res)=>{
// do something
})
io.on('connect',socket =>{
// socket related stuff
})
server.listen(3000)
问题是每当我试图运行这段代码时,我都会收到一个TypeError:req.getheader不是一个函数
我已经尝试了req.get(),req.header(),req.headers(),但似乎没有任何效果。 我是nodejs环境的新手
req.headers
不是方法,而是对象。 还可以在req.raWheaders
数组中读取原始头
const express = require('express')
const app = express()
const crypto = require('crypto')
const parser = require('body-parser')
const compression = require('compression')
const server = require('http').createServer(app)
server.on('upgrade', (req, socket, head) => {
let key = req.headers['Sec-WebSocket-Key']
let conc = key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'
let hash = crypto.createHash('sha1')
hash.update(conc)
let encoded_data = hash.digest('base64')
socket.write('HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
'Upgrade: websocket\r\n' +
'Connection: Upgrade\r\n' +
'Sec-WebSocket-Accept: ' + encoded_data + '\r\n' +
'\r\n')
socket.pipe(socket) // echo back
})
const io = require('socket.io')(server)
app.get('/',(req,res)=>{
// do something
})
io.on('connect',socket =>{
// socket related stuff
})
server.listen(3000)
PS:
在这里,您可以看到一些在代码中使用分号的理由