提问者:小点点

TypeError:Req.GetHeader不是函数


我正在使用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环境的新手


共1个答案

匿名用户

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:

在这里,您可以看到一些在代码中使用分号的理由