Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在我的html中使用节点函数_Javascript_Html_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 在我的html中使用节点函数

Javascript 在我的html中使用节点函数,javascript,html,node.js,mongodb,mongoose,Javascript,Html,Node.js,Mongodb,Mongoose,我正在制作一个网站,需要改变一个嵌入式视频时,按钮被点击。我的html页面加载一个js脚本,该脚本需要调用数据库中的一个函数,该函数是用node编码的。整个过程都在mongoDB服务器上运行,mongoose支持我。为了让事情更清楚,这里有一些代码: 我的数据库(仅相关功能): 现在,我需要通过我的html页面调用一个脚本,它能够调用getSongById(someID)。既然我不需要(数据库),因为需要是基于节点和服务器的,我该如何做呢。另外,由于getSongById(someID)由于sa

我正在制作一个网站,需要改变一个嵌入式视频时,按钮被点击。我的html页面加载一个js脚本,该脚本需要调用数据库中的一个函数,该函数是用node编码的。整个过程都在mongoDB服务器上运行,mongoose支持我。为了让事情更清楚,这里有一些代码:

我的数据库(仅相关功能):

现在,我需要通过我的html页面调用一个脚本,它能够调用getSongById(someID)。既然我不需要(数据库),因为需要是基于节点和服务器的,我该如何做呢。另外,由于getSongById(someID)由于save调用而异步,如何确保返回值不为null?我需要暂停几秒钟吗

脚本文件需要如下所示,html页面将加载getRandomVideo():


谢谢你的帮助

创建到节点中的
getSongById()
函数的路由,然后从html文件向该url发出ajax请求

比如说,在你的app.js中,有如下内容:

app.get('/random-video', function(req, res) {
    console.log('random video method called');
    var numberOfSongs = db.getNextFreeId()-1;
    idToGet=Math.floor(Math.random() * numberOfSongs);
    db.getSongById(idToGet, function(err, song){
       console.log('found random song: '+ song);
       res.send(JSON.stringify(song));
    });    
});
<script>
$(document).ready(function(){
   $.ajax({
        url: '/random-video',
        contentType: 'application/json; charset=utf-8',
    }).done(function(song){
       //do stuff with the song
    });
})
</script>
您还必须将
getSongById()
函数修改为异步,如:

database.prototype.getSongById=function(id2, cb){


    songModel.findOne({id : id2}, function(err,obj){
        if (err) {
            console.log('Not Found, error: '+err);
            cb(err);
        } else if (obj) {
            console.log('Found:', obj);
            cb(null, obj);
        }
    });
};
然后,在html页面中,加载jQuery后,执行以下操作:

app.get('/random-video', function(req, res) {
    console.log('random video method called');
    var numberOfSongs = db.getNextFreeId()-1;
    idToGet=Math.floor(Math.random() * numberOfSongs);
    db.getSongById(idToGet, function(err, song){
       console.log('found random song: '+ song);
       res.send(JSON.stringify(song));
    });    
});
<script>
$(document).ready(function(){
   $.ajax({
        url: '/random-video',
        contentType: 'application/json; charset=utf-8',
    }).done(function(song){
       //do stuff with the song
    });
})
</script>

$(文档).ready(函数(){
$.ajax({
url:“/随机视频”,
contentType:'application/json;charset=utf-8',
}).完成(功能(歌曲){
//用这首歌做些什么
});
})

我觉得回答这样的问题是不值得的,所以简而言之,让你的课堂事件驱动,例如使用。然后将其作为一个接口,并以不同的方式为服务器和客户端实现它。因此,客户机调用
db.getSongById(666,(result)=>{})
,其中
(result)=>{}
是一个回调,一旦结果来自服务器,它就会处理结果。这是正确的做法。这似乎是正确的做法!但是我从不使用ajax,发出ajax请求的语法是什么?非常奇怪的事情发生了,我从html页面调用这个函数:。我页面上显示的视频突然显示了我在app.use()中提供的错误消息,而不是将其更改为链接。通过日志,我知道responseText是正确的链接,如果我只是通过html()调用它,它就可以完美地工作。不知道该怎么想任何想法?出于某种原因,当我调用document.getElementById('myVideo').src时,它会向服务器发出一个get请求,比如你应该为此创建一个单独的问题,并提供更多的上下文,比如说,你的HTML看起来怎么样。好的,谢谢,给你