在node.js中如何将“require”对象传递给jade?

时间:2015-12-09 06:16:36

标签: jquery node.js

我创建了一个包含一个简单js文件的节点模块。我想在我的jade文件中使用这个js函数。在music.js中,我需要模块“myplayer”:

var keystone = require('keystone');
exports = module.exports = function(req, res) {
   var view = new keystone.View(req, res);
var locals = res.locals;
    locals.myplayer = require('myplayer');
    // locals.section is used to set the currently selected
// item in the header navigation.
    locals.section = 'music';
// Render the view
view.render('music');
};

我知道它正在访问此文件,因为当我在浏览器中访问music.jade时,myplayer js文件中包含一个控制台打印语句,该文件出现在我的终端中。 然后在我的music.jade文件中,我尝试使用myplayer函数,myplayer()。tryplay。

extends ../layouts/default
block content
.container: .jumbotron
    img(src='/images/logo.svg', width='160')
    h1 Welcome
    audio#test(controls='')
        source(src='/mymusic/cold.mp3')
        | Your browser does not support the audio element.
    button Click me
        if (section == 'music')
            li sees variable
    p The Music page is currently under construction
    hr
block js        
script.
    $(document).ready(function(){
    $("button").click(myplayer().tryplay)   
    });

似乎我正确地传递了变量,因为我和locals.section完全一样,它会影响是否“打印变量”。

我得到的错误是“参考错误:myplayer未定义”

所以我有很多问题。 “if(section =='music')”语句实际上是一个jquery命令,而不是css吗?但我没有看到“$”或任何表示这一点的东西。

“部分”显然是值“音乐”的变量,但我无法弄清楚如何在music.jade css脚本或内部javascript中打印出来。

最后,当然是,为什么不能“$(”按钮“)。click(myplayer()。tryplay)”找到对象myplayer?

似乎我只是在制作简单的语法错误,但我担心我真的迷失了。

感谢您的帮助。

这是我正在尝试重现的内容,但使用node_modules:

extends ../layouts/default
block content
.container: .jumbotron
img(src='/images/logo.svg', width='160')
h1 Welcome
audio#test(controls='')
    source(src='/mymusic/cold.mp3')
    | Your browser does not support the audio element.
    button Click me
    p The Music page is currently under construction
    hr
block js        
script(src='/jplay/my_jquery.js')
script.
    $(document).ready(function(){
    $("button").click(tryplay)
    });

这是my_jquery.js文件:

var tryplay = function(){
    $("#test")[0].play();}

以上2个文件正常。 我创建的myplayer node_modules主文件是:

var exports = module.exports = {} ; 
function startup () {
var tryplay = function(){
    $("#test")[0].play();}
console.log ("runUserScript");
}
startup ();

我不打算创建一个字符串,我想把这个函数传递给music.jade。显然,使用locals.myplayer是不正确的?

所以我将music.js改为:

    var keystone = require('keystone');
    exports = module.exports = function(req, res) {
    var myplayer = require('myplayer');
    var view = new keystone.View(req, res);
    var locals = res.locals;
   //  locals.myplayer = require('myplayer');
    // locals.section is used to set the currently selected
    // item in the header navigation.
    locals.section = 'music';

    // Render the view
    view.render('music');
    };

我将music.jade改为:

extends ../layouts/default
block content
.container: .jumbotron
    img(src='/images/logo.svg', width='160')
    h1 !{section}
    audio#test(controls='')
        source(src='/mymusic/cold.mp3')
        | Your browser does not support the audio element.
    button Click me
    p The Music page is currently under construction
    hr
block js        
script.
    $(document).ready(function(){
    $("button").click(function(){myplayer().tryplay})   
    });

但现在我得到“ReferenceError:myplayer未定义”,所以我没有到达任何地方。

1 个答案:

答案 0 :(得分:0)

阅读本文后: Script path for ExpressJS in node_modules 我意识到我开始正确地做事。您的客户端javascript文件应该位于公用文件夹中,而不是node_modules文件夹中。以上链接描述了如何访问node_modules中的文件。 我试图这样做的原因是因为我用“npm install”下载了jplayer并且为了让它运行我必须将jquery.jplayer.js文件复制到公共目录,这似乎不正确。 我应该做的是使用“凉亭”这两个网站建议? https://github.com/happyworm/jPlayerHow to include scripts located inside the node_modules folder?