Экспресс-потоковые заголовки содержимого ответов и кэширование - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь понять различия между двумя маршрутами ниже в приложении express.

const express = require('express')
const app = express()
const LOG_FOLDER = '/my/log/folder'

app.get('/log_stream/:id', (req, res, next) => {
    if (req.fresh) {
        res.sendStatus(304)
    }

    let logFile = path.resolve(LOG_FOLDER, req.params.id + '.log')

    let readStream = fs.createReadStream(logFile)
    readStream.on('open', () => {
        readStream.pipe(res)
    })

    readStream.on('error', (err) => {
        res.status(500).json({ 'error': err })
    })
})

app.get('/log/:id', (req, res, next) => {
    if (req.fresh) {
        res.sendStatus(304)
    }

    let opts = {
        dotfiles: 'deny'
    }

    let logFile = path.resolve(LOG_FOLDER, req.params.id + '.log')

    let readStream = fs.createReadStream(logFile)
    readStream.on('open', () => {
        res.sendFile(logFile, opts, (err) => {
            if (err) {
                next(err)
            }
        })
    })

    readStream.on('error', (err) => {
        res.status(500).json({ 'error': err })
    })
})

app.listen(3000)

Есть ли предпочтительный подход?
Основное различие заключается в заголовках, так как функция res.sendFile() устанавливает многие из них автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...