#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);