Javascript 使用Node.js将html作为静态文件动态提供

Javascript 使用Node.js将html作为静态文件动态提供,javascript,node.js,dynamic,server,static-files,Javascript,Node.js,Dynamic,Server,Static Files,我正在尝试提供一个目录,其中包含Node.js应用程序中的index.html文件。html用于虚拟现实,在目录中使用一些javascript和三个.js文件进行渲染。我尝试将该文件作为静态文件提供。当我使用url“localhost:8080/”提供该文件时,使用这行代码,它可以正常工作: app2.use('/', express.static('/Users/nancycollins/virtuload-beta/backend/uploads/7eef1d1f06439d8612a240

我正在尝试提供一个目录,其中包含Node.js应用程序中的index.html文件。html用于虚拟现实,在目录中使用一些javascript和三个.js文件进行渲染。我尝试将该文件作为静态文件提供。当我使用url“localhost:8080/”提供该文件时,使用这行代码,它可以正常工作:

app2.use('/', express.static('/Users/nancycollins/virtuload-beta/backend/uploads/7eef1d1f06439d8612a2409f75f545fb1569088983271/Nancy_Collins_118226967_v2'))

但只要我把它弄得有点动感,它就会说‘拿不到’。我也不能向url添加任何内容,它只提供带有“/”的服务

当我向其中添加一个变量时,它也会起作用,如下所示:

const dir = '7eef1d1f06439d8612a2409f75f545fb1569088983271/Nancy_Collins_118226967_v2/'
app2.use('/', express.static('/Users/nancycollins/virtuload-beta/backend/uploads/${dir}'))
但是,使用URL参数根本不起作用。我需要能够将整个目录作为一个静态文件提供服务,因为由于某种原因,当我指定index.html文件时,它不起作用

我希望下面的函数根据req.param.id(保存到mongodb)查找文件路径,url为“localhost:8080/12345678”,但它不能作为静态文件使用,但它可以完美地获得文件路径:

app2.use('/:id', express.static('/Users/nancycollins/virtuload-beta/backend/uploads/'))

app2.get('/:id', function(req, res, next) {
  let id = req.params.id
  console.log(id)
  Upload.findById(id)
    .populate('Upload')
    .select('relPath') //relPath = /folder/subfolder
    .exec(function (err, upload) {
      if (err) {
        console.log(err)
      } else {
          const dir = path.join(__dirname, 'uploads')
          const filepath = `${upload.relPath}`
          const fulldir = path.join(dir, filepath)
          fs.readdir(fulldir, function(err, items) {
          if (err) {
            console.log(err)
          } else {
            try {
              for (var i=0; i<items.length; i++) {
                  console.log(items[i]);
                  console.log(items.length);
                  var directpath = path.join(fulldir, items[0])
                  console.log(directpath)
                  // req.url = `/${directpath}`
                 // req.url = `${directpath}/index.html` 
                  res.sendFile('index.html', {root: directpath});
              }
            }
            catch (e) {
              console.error(e)
            }
          }
        }) 
        //next()
      }
    })
})
我什么都不行

编辑:

我将其更改为以下代码,现在生成一个错误:“错误:找不到模块‘html’”

app2.use('/',express.static(path.join('uploads'),options))
const dirfile='7eef1d1f06439d8612a2409f75f545fb1569088983271/'
app2.get('/',函数(req,res,next){
//let id=req.params.id
//控制台日志(id)
//Upload.findById(id)
//.populate('上传')
//.select('relPath')//relPath=/folder/subfolder
//.exec(函数(错误,上载){
//如果(错误){
//console.log(错误)
//}其他{
const dir=path.join(uu dirname,'uploads')
const filepath=dirfile
const fulldir=path.join(dir,filepath)
fs.readdir(fulldir,函数(err,items){
如果(错误){
console.log(错误)
}否则{
试一试{

对于(var i=0;如果您给出了几个希望与
express.static()一起使用的URL示例,那么我们只能帮助您回答
express.static()
问题
路由,然后精确显示要与每个URL匹配的文件的完整路径。只有这样,我们才能建议如何最好地设置
express.static()
路由。此外,将
/:id
express.static()一起使用也毫无意义
因为在预构建的
express.static()中没有使用
req.params.id
的自定义代码
中间件。我想使用的唯一url是/:id,因为我需要根据mongoose的id为文件夹提供服务。我甚至还设置了第二台express服务器,专门为这些目录提供服务,因为我找不到任何解决方案。如果没有使用req.params.id的自定义代码,这是否意味着我无法使用url获取数据库中用于指定express.static()路由的id?我完全不理解最后一条注释的含义。请显示获取“来自mongoose的id”的代码,然后在文本中描述该id的用途。
express.static()
表示“static”。它适用于所有用户的URL都是相同的。它不适用于动态URL,因为动态URL可能会因环境的不同而有所不同,或者具有某些动态部分。
req.url = `${directpath}`
app2.use('/', express.static(path.join(__dirname, 'uploads'), options))
const dirfile = '7eef1d1f06439d8612a2409f75f545fb1569088983271/'
app2.get('/', function(req, res, next) {
  // let id = req.params.id
  // console.log(id)
  // Upload.findById(id)
  //   .populate('Upload')
  //   .select('relPath') //relPath = /folder/subfolder
  //   .exec(function (err, upload) {
  //     if (err) {
  //       console.log(err)
  //     } else {
          const dir = path.join(__dirname, 'uploads')
          const filepath = dirfile
          const fulldir = path.join(dir, filepath)
          fs.readdir(fulldir, function(err, items) {
          if (err) {
            console.log(err)
          } else {
            try {
              for (var i=0; i<items.length; i++) {
                  console.log(items[i]);
                  console.log(items.length);
                  var directpath = path.join(fulldir, items[0])

                  console.log(directpath)
                  res.sendFile('index.html', {root: __dirname + 'uploads/7eef1d1f06439d8612a2409f75f545fb1569088983271/Nancy_Collins_118226967_v2'});
                  //express.static(`${directpath}`)
              }
            }
            catch (e) {
              console.error(e)
            }
          }
        }) 
    //   }
    // })
})