#javascript #html #node.js
Вопрос:
Я пытаюсь загрузить видеофайл на страницу интерфейса, но он не работает. ниже приведен код. Пожалуйста, дайте мне знать, в чем дело, потому что я продолжаю получать сообщение об ошибке, приведенное к строке не удалось для значения в учебнике по пути. это схема модели
//this is the model schema
var mongoose = require("mongoose");
var courseSchema = new mongoose.Schema({
name: String,
course: String,
createdAt: {
type: Date,
default: Date.now
},
tutorial: String,
price: String,
description: String,
author: {
id: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
username: String
},
comments: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Comment"
}
]
});
module.exports = mongoose.model("Course", courseSchema);
это почтовый маршрут
//this is the route
router.post("/", upload.single("tutorial"), function(req, res, next){
//get data from the form and add it to the course array
var name = req.body.name;
var course = req.body.course;
var tutorial = req.file;
var price = req.body.price;
var description = req.body.description;
var author = {
id: req.user._id,
username: req.user.username
};
var newCourse = {name: name, course: course, tutorial: tutorial, price:price, description: description, author: author}
//Create a new course and save to the database
Course.create(newCourse, function(err, newlyCreated){
if(err){
console.log(err)
} else {
//redirect it page back to the courses page
res.redirect("courses/" req.body.course);
}
});
});
это передняя часть.
//this is the frontend <div class="row container"> <!-- blog grid --> <% courses.forEach(function(course){ %> <div class="col-lg-4 col-md-6"> <div class="card"> <div class="card-header p-0 position-relative"> <a href="/courses/<%- course._id %>"> <video class="card-img-bottom" src="${req.file.path}" alt="course" controls></video> <span class="post-icon" aria-hidden="true">
lt;%- course.price %></span>
</a>
</div>
<div class="card-body">
<h6 class="text-colors let-spa mb-3"></h6>
<h5 class="blog-title card-title font-weight-bold text-bl"><%- course.name %></h5>
<div class="row mt-5">
<div class="col-3 testi-img-res px-2">
<img src="/images/te1.jpg" alt=" " class="img-fluid rounded-circle" />
</div>
<div class="col-9 w3_testi_grid mt-xl-2 mt-lg-0 mt-md-2 mt-4">
<h5 class="text-colors mb-1"><%- course.author.username %></h5>
<p>Good day Programmers</p>
</div>
</div>
</div>
</div>
</div>
<% }); %>
<!-- //blog grid -->
</div>
Он просто продолжает возвращать этоError: Course validation failed: tutorial: Cast to string failed for value "{ fieldname: 'tutorial', originalname: 'name of the file', encoding: '7bit', mimetype: 'video/mp4', destination: 'public/course_uploads', filename: '1626194886684.mp4', path: 'public\course_uploads\1626194886684.mp4', size: 32510498 }" at path "tutorial" { stringValue: '"{n' " fieldname: 'tutorial',n" " originalname: '09. Navigation Bar and Menu in CSS.mp4',n" " encoding: '7bit',n" " mimetype: 'video/mp4',n" " destination: 'public/course_uploads',n" " filename: '1626194886684.mp4',n" " path: 'public\\course_uploads\\1626194886684.mp4',n" ' size: 32510498n' '}"', messageFormat: undefined, kind: 'string', value: [Object], path: 'tutorial', reason: null } }, _message: 'Course validation failed' }
Комментарии:
1. вы должны сохранить свой файл в своем бэкэнде. и сохраните путь к файлу в своей базе данных.
2. именно так он загружается в папку загрузки курса, и в базе данных он хранится как «public/course_uploads/filename» или он должен храниться с корневым путем?
Ответ №1:
создайте /загрузите файл в бэкэнд ur.
не забудьте использовать его путь к файлу в ur index.js
app.use('/videos', express.static('/uploads))
Я использовал /видео в качестве префикса
затем сохраните файл и назовите его, используя его имя поля и исходное имя из multer:
${file.fieldname}${path.extname(file.originalname)}
В вашей базе данных сохраните его как : http://localhost:5000/videos/${req.file.filename}
Используя этот URL-адрес, вы можете использовать доступ к видео в интерфейсе.
Комментарии:
1. github.com/RUPAAK/MERN_FILEUPLOAD_CODE/blob/master/server/… воздержитесь от этого кода
2. Тогда как мне вызвать интерфейс, используя src=’ ‘
3. в интерфейсе ur вы можете использовать URL-адрес, который хранится в базе данных. т. е. локальный хост:5000/видео/$ {req.файл. имя файла} в этом случае
4. ОК. Но сработает ли это, если я загружу сайт на свой хост? В этом-то и проблема
5. да, измените инициалы, например: вместо локального хоста:5000 …. используйте urhost.com ……