簡體   English   中英

nodejs導出功能按需

[英]nodejs export function on require

我在某些ExpressJS路線上有以下代碼行:

var test = require('../app/test')('dev');
test.getData(); //this fails saying: typeError getData() is not a function

我的測試文件如下所示:

module.exports = function(env){

  var mod = {
  'field1': 'asd',
  'field2': 'asd2'
 };

 mod.getData = function(){
  return 'data';
 };

 return mod;
};

我究竟做錯了什么?

2錯誤:

1 /

您可以定義filed1並在調用時使用field1 ==>鍵入錯誤

2 /

您需要編寫返回具有屬性getData對象的包,該對象是另一個類似於以下內容的function

module.exports = function(env){

  var mod = {
  'filed1': 'asd',
  'field2': 'asd2',
  'getData' :function(){

       return 'data';
     }
 };

 return mod ;


};

說明:

  • require('../app/test')返回function(env){ ....
  • require('../app/test')('dev')調用function(env){....}('dev') ==>它返回function(env){....的輸出。

  • 此輸出應該是包含屬性getData的對象( mod ),並且其值應該是能夠調用require('../app/test')('dev').getData()的函數require('../app/test')('dev').getData()


演示:

 test=function(env){ var mod = { 'filed1': 'asd', 'field2': 'asd2', 'getData' :function(){ return 'data'; } }; return mod ; }; console.log(`Can i call "test.getData()" ?` ) try{ test('dev').getData(); //!--- Call like this console.log('yes') }catch(e){ console.log('No : ',e) } console.log(`Can i call "test('dev').filed1" ? => `,test('dev').filed1 ==='asd' ); 

這是完整的源代碼。

test.js:

module.exports = function(env){

  var mod = {
    'filed1': 'asd',
    'field2': 'asd2',
    'somefunction' : function () {


    return 'data';

  }
  };


  return mod;
};

index.js

var test = require('../test');
test().somefunction();

問題是您正在嘗試訪問名為getData的對象的屬性。 getData已經定義為mod對象的屬性。 因此,如果要訪問它,則需要刪除括號。 test.getData就足夠了。 但是,getData被定義為一個函數。 同樣test.js被導出為函數。 因此,您將需要訪問test(),然后通過getData()在test()中調用該函數;

暫無
暫無

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

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