res.sendFile(file)和express.static(file)之间的不同之处

问题描述 投票:0回答:1

我正在制作一个Web应用程序,我可以在其中上传我已经完成的一些Three.js虚拟现实项目并将其提供给浏览器。

[当我开始制作它时,我对VR文件夹进行了快速测试,以查看是否可行。代码起作用了,所以我开始花很多时间开发应用程序。我使用的代码如下:

app.use('/', express.static('/Users/virtuload-beta/backend/uploads/065fe1658b1374605f31d100eb1e7a1a1568654427336/Nancy_Collins_118226967_v2/'))

这很好,浏览器渲染了我的VR场景。我还想确保可以动态提供文件(例如,用户单击要使用href指向URL的href渲染哪个VR场景),所以我执行了下面的代码,效果也很好:

const filepath = '065fe1658b1374605f31d100eb1e7a1a1568654427336/Nancy_Collins_118226967_v2/'
app.use('/', express.static(`/Users/virtuload-beta/backend/uploads/${filepath}`))

我现在基本上已经完成了该应用程序,除了我有一个大问题,当我为VR文件夹提供了指定的index.html文件(您需要使用res.sendFile进行处理)时,浏览器无法读取该文件夹中的文件而我得到红色错误。

我的函数不再将其用作静态文件,它从URL获取ID,然后从mongodb查找文件路径,如下所示:

const servepath = (req, res, next) => {
    let id = req.params.id
    Upload.findById(id)
      .populate('Upload')
      .select('relPath') //relPath = /folder/subfolder
      .exec(function (err, upload) {
        if (err) {
          res.send(err)
          console.log(err)
        } else {
          const dir = path.join(__dirname, '..', '../vr/uploads')
          const filepath = `${upload.relPath}`
          const fulldir = path.join(dir, filepath)
          console.log(fulldir)
              try {
                    res.sendFile('index.html', {root: `${fulldir}`});

                }
              }
              catch (e) {
                console.error(e)
              }
          // return next();
        }
      })
}

浏览器正在查找html文件,但无法使用其解析JS文件:

GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/three.jsnet :: ERR_ABORTED 404(未找到)vr:21 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/OrbitControls.jsnet :: ERR_ABORTED 404(未找到)vr:22 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/GLTFLoader.jsnet :: ERR_ABORTED 404(未找到)vr:23 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/FBXLoader.jsnet :: ERR_ABORTED 404(未找到)vr:24 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/inflate.min.jsnet :: ERR_ABORTED 404(未找到)vr:25 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/js/WebGL.jsnet :: ERR_ABORTED 404(未找到)vr:118 GEThttp://localhost:3000/api/5d8b74be2af25086ab77fef7/MainScene.jsnet :: ERR_ABORTED 404(未找到)

当我将文件路径硬编码到我在此处指定的第一行代码(express.static)时,vr呈现完美……我试图将这些文件作为静态文件提供,但是您不能动态地执行,因此名称为“静态”文件。有人知道为什么会这样吗?

我对标题不是很了解,我对标题的缺乏了解可能会成为问题吗?

我正在制作一个Web应用程序,我可以在其中上传我已经完成的一些Three.js虚拟现实项目并将其提供给浏览器。当我开始制作它时,我对我的VR文件夹进行了快速测试,看是否...

node.js express static
1个回答
1
投票

您的servepath处理程序显然处理了对GET /api/:id的请求。当浏览器收到与index.html参数匹配的id的内容时,可能会找到表示为relative

© www.soinside.com 2019 - 2024. All rights reserved.