我正在做一个视频播放器应用程序,我想列出我的目录中的所有文件通过服务器访问。我还通过MongoDB使用身份验证。我想列出videos.ejs页面中的所有文件,以便用户可以看到目录中的文件列表并访问这些文件。我正在使用Node.js和EJS,但我被卡住了。如果你能帮我做这件事就太好了。下面是我的app.js:
//jshint esversion:6
require('dotenv').config();
const express = require ("express");
const bodyParser = require ("body-parser");
const ejs = require ("ejs");
const mongoose = require("mongoose");
const encrypt = require("mongoose-encryption");
const testFolder = 'public/vids/';
const fs = require('fs');
const app = express();
var list = "" ;
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
mongoose.connect("mongodb://localhost:27017/userDB", {useNewUrlParser: true});
const userSchema = new mongoose.Schema({
email: String,
password: String
});
const secret = "Thisismylilkey";
userSchema.plugin(encrypt, {secret: secret, encryptedFields: ['password'] });
console.log(fs.readdirSync);
const User = new mongoose.model("User", userSchema);
app.use(express.static("public"));
app.get("/register", function(req, res){
res.render("register");
});
app.post("/register", function (req, res) {
const newUser = new User({
email: req.body.username,
password: req.body.password
});
newUser.save(function(err){
if(err){
console.log(err);
}else{
res.render("home");
}
});
});
app.get("/", function (req, res) {
res.render("login");
});
app.post("/", function (req, res) {
const username = req.body.username;
const password = req.body.password;
User.findOne({ email: username }, function (err, foundUser) {
if (err) {
console.log(err);
} else {
if (foundUser) {
if (foundUser.password === password) {
res.render("home");
app.get("/home", function (req, res) {
res.render("home");
});
app.get("/music", function (req, res) {
res.render("music");
});
app.get("/videos", function (req, res) {
fs.readdir(testFolder, (err, files) => {
files.forEach(file => {
list = file;
console.log(list);
});
});
res.render("videos", { listing: list });
});
app.get("/documents", function (req, res) {
res.render("docs");
});
app.get("/photos", function (req, res) {
res.render("photos");
});
app.get("/player", function(req, res){
res.render("player")
});
}else{
res.send("Get the hell out of here :p")
}
}
}
});
});
app.listen(3000, '0.0.0.0' ,function(){
console.log("server started at port 3000");
});
这是我的视频。ejs:
<%- include("partials/header"); -%>
<h1 class="pg-title">videos</h1>
<div>
<video width="auto" height="240" controls>
<source src="/vids/<%= listing %>" type="video/mp4">
</video>
<a href="/player"><%= listing %></a>
<h1>name <%= listing %> </h1>
</div>
<%- include("partials/footer"); -%>
在您的文章/
route中,您正在路由所有路径,这是错误的做法,您将需要为所有单独的路径创建单独的路由。
现在回答你的主要问题,
在node.js中有一个内置的FS模块
使用它您可以获取特定路径中的所有文件和文件夹,查看https://nodejs.org/api/fs.html以获得更多详细信息,
在给定路径中读取文件的示例代码,而不是日志记录您可以将下面示例中的文件变量发送到ejs以呈现它(下面使用的路径名也是我的app.js所在的位置,即__dirname)
let fs = require('fs');
let files = fs.readdirSync(__dirname);
console.log(files);