我正在尝试在Node.js应用程序中提供一个包含index.html文件的目录。该html用于虚拟现实,并在目录中包含一些javascript和three.js文件。当我使用以下代码行向网址为“ 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()
}
})
})
此函数获得与第一个和第二个代码示例中的硬编码完全相同的路径,但在提供服务时将不起作用。
我对此感到非常困惑,对此感到非常压力,我不知道自己在做错什么。
例如,我也尝试过更改函数中的url,而不是res.sendFile。
req.url = `${directpath}`
没有什么对我有用
编辑:
我将其更改为以下代码,该代码现在产生一条错误消息:“错误:找不到模块'html'”
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)
}
}
})
// }
// })
})