NodeJS 如何使用fastify和nestjs发送文件?

carvr3hs  于 2023-04-05  发布在  Node.js
关注(0)|答案(3)|浏览(205)

我有以下前端中间件:

export class FrontendMiddleware implements NestMiddleware {
    use(req: any, res: any, next: () => void) {
        const url = req.originalUrl;
        if (url.indexOf('rest') === 1) {
            next();
        } else if (allowedExt.filter(ext => url.indexOf(ext) > 0).length > 0) {
            res.sendFile(resolvePath(url));
        } else {
            res.sendFile(resolvePath('index.html'));
        }
    }
}

它在express上工作正常,但在fastify上,res.sendFileundefined,那么我该如何解决这个问题呢?

v09wglhw

v09wglhw1#

看看这个问题。sendFile在fastify中没有等价的方法;你必须手动操作:

const stream = fs.createReadStream(resolvePath('index.html'))
res.type('text/html').send(stream)
fafcakar

fafcakar2#

您也可以将index.html存储在内存中并从内存中发送:

const bufferIndexHtml = fs.readFileSync('index.html')
res.type('text/html').send(bufferIndexHtml)
5us2dqdw

5us2dqdw3#

另一种方法是使用Fastify提供的fastify-static模块。他们有一些发送文件的好例子。更多信息可以在这里找到-https://github.com/fastify/fastify-static
下面是一个发送文件的例子-

const fastify = require('fastify')({logger: true})
const path = require('path')

fastify.register(require('@fastify/static'), {
  root: path.join(__dirname, 'public'),
  prefix: '/public/', // optional: default '/'
})

fastify.get('/sendHtmlFile', function (req, reply) {
  reply.sendFile('myHtml.html') // serving path.join(__dirname, 'public', 'myHtml.html') directly
})

// Run the server!
fastify.listen({ port: 3000 }, (err, address) => {
  if (err) throw err
  // Server is now listening on ${address}
})

相关问题