簡體   English   中英

在Node.js中使用require訪問外部JavaScript文件

[英]Using require in nodejs to access external javascript files

我一直試圖在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)
在需要時(module.js:380:17)
在server.use.express.static.index(D:\\ udu \\ tcide_a \\ src \\ tcide \\ server.js:613:24)
在Layer.handle上[作為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上[作為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);
        // });

});

只需編寫函數並將其導出到對象內即可(不帶.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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM