Node.js TLSwrap.onread ECONNRESET

时间:2018-12-05 11:53:45

标签: node.js

所以基本上我创建了自己的“ Imgur”,在其中输入图片网址等。

https://images.hdsydsvenskan.se/980x588/Q2GO5t2lmKtW6WwGuEVQNTPmt4o.jpg 

问题在于它以前曾经起作用,但是现在我遇到了错误(我完全没有更改代码-我猜它与某些URL有关吗?),它们说:

{ Error: read ECONNRESET
     at TLSWrap.onread (net.js:622:25) errno: 'ECONNRESET', code: 'ECONNRESET', syscall: 'read'}

老实说,我看不到问题,因为它可以在其他图片上使用,但是如果我选择等,则下面的图片。它一直给我这个问题。

const fs = require('fs')
const path = require('path')

const request = require('request')
const express = require('express')


const app = express()
const PORT = process.env.PORT || 8888

// Path to images directory
const images = path.join(__dirname, 'images')

// JSON parsing middleware
app.use(express.json())


app.post('/newimage', (req, res) => {
  const imageUrl = req.body.image_url
  const imageName = req.body.image_name
  request({
    url: imageUrl,
    headers: {
      'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
    }
  })
  .on('error', (err) => {
    console.log(err)
    console.log(res.status())
    res.status(500)
    res.send('not ok')
  })
  .on('response', (response) => {
    console.log(`Response for ${imageUrl}`)
    console.log(response.statusCode + '\n')
    res.send('ok')
  })
  .pipe(fs.createWriteStream(path.join(images, imageName + '.png')))
})


app.get('/images/:imagename', (req, res) => {
  const imageName = req.params.imagename
  const filePath = path.join(images, imageName + '.png')
  console.log(imageName)
  console.log(filePath)
  if (fs.existsSync(filePath)) {
    fs.createReadStream(filePath)
      .pipe(res)
  } else {
    res.send('No image found')
  }
})


app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`)
  console.log(`http://xx.xxx.xx.xx:${PORT}`)
})

如果有任何线索我将如何解决!我将不胜感激!

1 个答案:

答案 0 :(得分:1)

您提到的in your comment与Adidas服务器之间发生了一些时髦的事情,它需要设置特定的标头列表才能起作用(否则,请求超时)

request({
  url: imageUrl,
  headers: {
    Accept: '*/*',
    'Accept-Encoding': 'gzip, deflate',
    Connection: 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
  }
})

看起来他们正在使用的Varnish缓存可能配置错误(或者尝试阻止刮板是一种奇怪的尝试)。