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