mongoose 尝试使用mongoDB和ejs从firebase呈现vid文件时出错

nlejzf6q  于 2023-03-12  发布在  Go
关注(0)|答案(1)|浏览(124)

我正在尝试使用Node、Express、Mongoose和ejs制作类似YouTube克隆应用程序的东西。当尝试使用res.render()将结果发送到ejs文件中的iframe时,我收到了一个错误。
下面是ejs和服务器文件的代码:
索引.js:-

>! 
>! `const express = require('express');
>! const mongoose = require('mongoose');
>! const bodyParser = require('body-parser');
>! const ejs = require('ejs');
>! 
>! const app = express();
>! 
>! app.use(bodyParser.urlencoded({
>! extended: true
>! }));
>! app.use(express.static("public"));
>! app.set('view engine', 'ejs');
>! 
>! mongoose.connect("mongodb://127.0.0.1:27017/VidDb");
>! 
>! const userSchema = new mongoose.Schema({
>! name:{
>! type:String,
>! required:true,
>! unique:true
>!   },
>! email:{
>! type:String,
>! required:true,
>! unique:true
>!   },
>! password:{
>! type:String,
>! required:true,
>!   },
>! image:{
>! type:String,
>!   },
>! },{timestamps:true});
>! 
>! const User = mongoose.model("User",userSchema);
>! 
>! const vidSchema = new mongoose.Schema({
>! vidName:{
>! type:String,
>! required:true,
>! unique:true
>!   },
>! vidThumb:{
>! type:String,
>! required:true,
>! unique:true
>!   },
>! vidLink:{
>! type:String,
>! required:true,
>! unique:true
>!   },
>! likes:{
>! type:Number,
>! default:0
>!   },
>! views:{
>! type:Number,
>! default:0
>!   },
>! });
>! 
>! const Vids = mongoose.model("Vid",vidSchema);
>! 
>! app.get("/",function(req,res){
>! Vids.find().then(function(vids,err){
>! res.render("index",{
>! videos:vids
>!       });
>!   });
>! });
>! 
>! app.get("/vids/:vidId",function(req,res){
>! const videoID = req.params.vidId;
>! Vids.findById(videoID).then(vid => {
>! res.render("vid",{
>! video:vid
>!     });
>!   });
>! });
>! 
>! app.listen(3000,function(){
>! console.log("Server Started");
>! });
>! 
>! `

视频:-

`<%- include('partials/header'); -%>
<!-- <video
    id="my-video"
    class="video-js"
    controls
    preload="auto"
    width="640"
    height="264"
    poster="MY_VIDEO_POSTER.jpg"
    data-setup="{}"
  >
    <source src="<%= video.vidLink %>" type="video/mp4" />
    <p class="vjs-no-js">
      To view this video please enable JavaScript, and consider upgrading to a
      web browser that
      <a href="https://videojs.com/html5-video-support/" target="_blank"
        >supports HTML5 video</a
      >
    </p>
  </video> -->


<iframe width="1020" height="815" src= "<%= video.vidLink %>" ></iframe>
<script src="https://vjs.zencdn.net/8.0.4/video.min.js"></script>
<%- include('partials/footer'); -%>

`

我在控制台日志记录时得到了链接,但当试图将链接发送到ejs文件时,它不再工作了。

balp4ylt

balp4ylt1#

据我所知,你不能在ejs文件中传递var/link,对吗?
问题是您传递了错误的ejs文件路径,当您使用res.render()时,它试图查找文件路径,而您只是传递了名称。
验证码:

app.get("/vids/:vidId",function(req,res){
   const videoID = req.params.vidId;
     Vids.findById(videoID).then(vid => {
        res.render("vid",{
          video:vid
        });
    });
});

更新代码:

app.get("/vids/:vidId", function (req, res) {
     const videoID = req.params.vidId;
     Vids.findById(videoID).then((vid) => {
        res.render(__dirname+"/vid.ejs", { appUrl:'http://localhost:3000',
          video: vid,
        });
     });
});

此处:

*__目录名:我们使用它来定义目录路径,例如您的项目所在的目录。
*appUrl:用于API url。当您将代码推送到服务器中,并在ejs文件中传递任何文件路径时,将通过appUrl访问该文件。这是可选的。
注意:在呈现任何ejs模板时,请删除所有注解。有关详细信息,请访问this页面。

我用这个ejs:

<iframe width="1020" height="815" src= "<%= video.vidLink %>" ></iframe>
<script src="https://vjs.zencdn.net/8.0.4/video.min.js"></script>

数据:x1c 0d1x
输出:

相关问题