Как я могу перечислить все файлы в каталоге node.js EJS

#node.js #mongodb #express #localhost #ejs

#node.js #mongodb #выразить #localhost #ejs

Вопрос:

Я создаю приложение для видеоплеера, я хочу перечислить все файлы в моем каталоге для доступа через сервер. Я также использую аутентификацию через 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");
});
  

Вот мои videos.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"); -%>
  

Комментарии:

1. Вы можете создать отдельный маршрут для видео, создать промежуточное программное обеспечение, которое поможет аутентифицировать пользователей. Используя fs модуль, извлеките все состояния файлов и покажите пользователю, а затем, когда пользователи нажимают на одно видео, извлеките исходное видео с сервера.

2. Вы делаете здесь неправильно. Вы просто вызываете все маршруты в методах post.

Ответ №1:

В вашем post / маршруте вы прокладываете все пути, что НЕПРАВИЛЬНО, вам нужно будет создать отдельный маршрут для всех отдельных путей.

Теперь отвечаю на ваш основной вопрос,

существует встроенный fs module в node.js используя его, вы можете получить все файлы и папки по определенному пути, проверьте это https://nodejs.org/api/fs.html для получения более подробной информации,

Пример кода для чтения файлов по указанному пути, вместо регистрации вы можете отправить переменную files в приведенном ниже примере в ejs для ее отображения (также имя пути, которое я использовал ниже, указывает, где мой app.js присутствует __dirname)

 let fs = require('fs');

let files = fs.readdirSync(__dirname);

console.log(files);