NextJS不识别生产中动态添加的静态资产

6tr1vspr  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在运行一个两个容器的Docker设置; NextJS用于面向公众的Web,Django后端用于管理员添加内容。路由与getInitialProps很好地工作,它获取添加的内容。由于内容引用静态图像,它们通过Docker卷连接(django容器上的./static/media和nextjs容器上的./public/media)。
但是,当新图像出现在./public/media中时,启动的NextJs服务器会为这些图像返回404响应。
//编辑的解决方案:如@Pierfrancesco所建议的
解决方案是创建一个自定义服务器,动态地为这些文件提供服务

// server.js
const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  const server = express()

  server.get('/media/images/*', (req, res) => {
    // Disallow travelling up in the file tree
    let target = req.originalUrl.replace("..", "")
    return res.sendFile(__dirname + '/public' + target);
  })

  server.all('*', (req, res) => {
    return handle(req, res)
  })

  server.listen(port, err => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})

字符串
这可能是一个功能请求,或者这是NextJS中的一个错误?

inn6fuwd

inn6fuwd1#

“只有在构建时位于公共目录中的资产才会由Next.js提供服务。在请求时添加的文件将不可用。我们建议使用第三方服务(如AWS S3)进行持久文件存储。”请参阅Next.js Static Assets

相关问题