在nodejs中使用require来访问外部javascript文件

时间:2015-03-18 13:01:48

标签: javascript node.js file require

我一直在尝试在nodejs中使用require来访问带有简单脚本的javascript文件。我的目标是要求脚本并将其返回值输出到控制台。到目前为止,这就是我所拥有的:

oper2 = function(){
    var x = 1;
    var y = x+1;
    return y;
};

module.exports = {
   oper2: oper2
};

这是我想通过我的nodejs api访问的文件,在api中我有这个代码试图使用require:

        var dir = 'files/'+name;
        var func = require('./'+dir);

        console.log("here?");

        console.log("Value" + func.oper2()); //test operation

        res.json('done');//value received by the api

我尝试了多个版本的文件和代码来要求文件,但还没有走得太远。它总是在var func = .....行崩溃,说错误找不到模块。即使我在此之前有代码来测试它是否读取文件,并且它正在查找并读取文件。

非常感谢任何帮助,谢谢。

编辑:

files.route('/:name/execute')
    .post(function (req, res){

        var dir = 'files/'+name;
            var func = require('./'+dir);

            console.log("here?");

            console.log("Value " + func.oper2);


            res.json('done');


});

目前在需要时它仍然会崩溃。

编辑3错误:


在Function.Module._resolveFilename(module.js:338:15)     
在Function.Module._load(module.js:280:25)         
在Module.require(module.js:364:17)             
at require(module.js:380:17)                 
在server.use.express.static.index(D:\ udu \ tcide_a \ src \ tcide \ server.js:613:24)                     
在Layer.handle [as handle_request](D:\ udu \ tcide_a \ src \ tcide \ node_modules \ express \ lib \ router \ layer.js:82:5)                         
下一步(D:\ udu \ tcide_a \ src \ tcide \ node_modules \ express \ lib \ router \ route.js:110:13)                             
在Route.dispatch(D:\ udu \ tcide_a \ src \ tcide \ node_modules \ express \ lib \ router \ route.js:91:3)                                 
在Layer.handle [as handle_request](D:\ udu \ tcide_a \ src \ tcide \ node_modules \ express \ lib \ router \ layer.js:82:5)                                     
在D:\ udu \ tcide_a \ src \ tcide \ node_modules \ express \ lib \ router \ index.js:267:22

编辑4(这是我的确切代码,我上面简化了它):

behaviorR.route('/:behavior/execute')
    .get(function (req, res){

        var dir = 'operations/'+req.params.behavior;

        // if(!fs.existsSync(dir)){
        //     console.log('Not found');;
        // }
        // else{
            console.log('About to require');

            var func = require('./'+dir);

            console.log("here?");

            // console.log("Value %d", func.oper2(5));


            res.json('done');
        // }

        // fs.readFile('operations/'+req.params.behavior+'.js', "utf8", function(error, data) {
        //   res.json(data);
        // });

});

2 个答案:

答案 0 :(得分:0)

只需编写函数并将其导出到对象(不带.js)

var oper2 = function(value){
    var x = 1;
    var y = x+1+value;
    return y;
};

// Export object which contains the above method
module.exports = {
   oper2: oper2
};

在主模块中

var dir = 'files/'+name;
var func = require('./'+dir);

console.log("Value %d", func.oper2(5)); //test operation

res.json('done');//value received by the api

答案 1 :(得分:0)

module.exports是require返回的对象。使用module.exports将允许像函数一样调用所需的模块。

var oper2 = function(value){
    var x = 1;
    var y = x+1+value;
    return y;
};

module.exports = oper2;

在主文件中

var dir = 'files/'+name;
var func = require('./'+dir);
console.log("Value %d", func(5)); //test operation
res.json('done');//value received by the api

使用exports可以将函数和对象添加到模块的根目录。

exports.oper2 = function(value){
    var x = 1;
    var y = x+1+value;
    return y;
};

在主文件中

var dir = 'files/'+name;
var func = require('./'+dir);
console.log("Value %d", func.oper2(5)); //test operation
res.json('done');//value received by the api