Я пытаюсь обслуживать каталог, который включает файл index.html в моем приложении Node.js.HTML-код предназначен для виртуальной реальности и визуализируется с некоторыми файлами javascript и three.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()
}
})
})
Эта функция получает точно такой же путь, как и тот, который жестко задан в первом и втором примерах кода, но не будет работать при обслуживании.
Я действительно запутался в этом и очень переживаю по этому поводу, я не знаю, что я делаю неправильно.
Я также пытался изменить 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)
}
}
})
// }
// })
})