我的自定义javascript函数“不是函数”?

时间:2016-01-25 23:43:42

标签: javascript node.js cookies

我写了一个小的.js文件,里面有3个函数,可以方便地进行现场cookie管理。以下是该文件的来源:

// Make Cookie
function Bake(name,value) {
var oDate = new Date();
oDate.setYear(oDate.getFullYear()+1);
var oCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';expires=' + oDate.toGMTString() + ';path=/';
document.cookie= oCookie; 
}

// Read Cookie
function Eat(name){
    name = name.toLowerCase();
var oCrumbles = document.cookie.split(';');
for(var i=0; i<oCrumbles.length;i++)
{
    var oPair= oCrumbles[i].split('=');
    var oKey = decodeURIComponent(oPair[0].trim().toLowerCase());
    var oValue = oPair.length>1?oPair[1]:'';
    if(oKey == name)
        return decodeURIComponent(oValue);
}
return '';
}

// Delete / Void Cookie
function Burn(name){
Bake(name,'');
}

我把.js文件放到Cloud9上的“/ models”文件夹中。在我的index.js中,我确实有一行:var OCookie = require('../models/oatmealcookie');来包含我的自定义“库”。但是,仍然在index.js中,我尝试在重定向之前调用OCookie.Bake('test','testvalue');,并在页面上显示错误TypeError: OCookie.Bake is not a function。关于为什么它无法将我的功能识别为功能的任何帮助?

3 个答案:

答案 0 :(得分:3)

如果这是您的整个文件,则不会通过module.exports导出任何功能。实际上,您的文件只运行一次,BakeEatBurn被声明为模块的函数,但没有其他模块可以使用它们。

您需要以下内容:

module.exports = {
    Bake: Bake,
    Eat: Eat,
    Burn: Burn
};

以便其他模块可以使用您的功能。

答案 1 :(得分:1)

您需要export您的函数,以便node.js在您require时识别它们。

请参阅此处:http://www.sitepoint.com/understanding-module-exports-exports-node-js/例如。

var exports = module.exports = {
    // Make Cookie
    'Bake': function (name,value) {
        var oDate = new Date();
        oDate.setYear(oDate.getFullYear()+1);
        var oCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';expires=' + oDate.toGMTString() + ';path=/';
        document.cookie= oCookie; 
    }

    // Read Cookie
    'Eat': function (name){
        name = name.toLowerCase();
        var oCrumbles = document.cookie.split(';');
        for(var i=0; i<oCrumbles.length;i++)
        {
            var oPair= oCrumbles[i].split('=');
            var oKey = decodeURIComponent(oPair[0].trim().toLowerCase());
            var oValue = oPair.length>1?oPair[1]:'';
            if(oKey == name)
               return decodeURIComponent(oValue);
        }
        return '';
    }

    // Delete / Void Cookie
    'Burn': function (name){
        Bake(name,'');
    }
}

按照惯例,你可以用小写字母开始你的函数名称。

答案 2 :(得分:1)

模块末尾需要exports.Bake = Bake