2017-09-21 141 views
0

我目前正在運行nodejs服務器。情況是這樣的,我有一個服務文件夾,在文件夾裏面,有很多service.js文件。在每項服務中,我將導出服務及其功能。 例如。nodejs服務器無法導出服務

var service = {}; 
service.fun1 = fun1; 
service.fun2 = fun2; 
... 
module.exports = service; 
function fun1(params) { ... }; 

現在,我必須要求另一個服務。例如,每當我需要從其他服務中使用的用戶服務,我會做

var userService = require('services/user.service'); 

,然後我可以用它作爲

userService.fun1(params).then(function(data){ ... }); 

我有一個優惠券服務需要要求用戶服務。在優惠券服務中,我可以要求除用戶服務之外的所有其他服務。而我得到這個錯誤

TypeError: userService.getById is not a function 

所以我儘量控制檯日誌userService,它是{},這意味着它不會導出莫名其妙。但是從其他服務中,我可以以相同的方式要求用戶服務,並且工作正常。

所以我試圖要求優惠券服務中的其他服務,所有工作。所以只有優惠券服務中的用戶服務纔會給出錯誤。

這讓我發瘋。

------ -------更新

的引發錯誤的代碼是從coupon_service.js:

var userService = require('services/user.service'); 

    function getAllCoupons(params) { 
     var deferred = Q.defer(); 
     if (params.field1 && params.field2 && params.field3 && params.start_index && params.page_length) { 
      userService.fun1(params.field2).then(function(data) { 
       if (data.response1 == params.expected1 && helper.userIsAdmin(params.response1, data.validate)) { 
        deferred.resolve(getAll(params.field2, params.start_index, params.page_length, params.filter)); 
       } else { 
        deferred.resolve(getCoupons(params)); 
       } 
      }); 
     } else { 
      deferred.resolve(getCoupons(params)); 
     } 
     return deferred.promise; 
    } 
+0

來自兩個文件的一些代碼會有所幫助。 –

+0

在我看來,問題可能在於優惠券服務代碼。你可能想要發佈實際拋出錯誤的代碼。想到一些想法:可以直接或間接覆蓋變量「userService」嗎?是否指向「userService」的相對路徑指向同一個文件? – souldzin

+0

的路徑應該是正確的,因爲我可以從同一個文件夾中的其他服務請求userService。 – leo277

回答

0

假設這兩個服務都在同一/services/夾,你應該能夠做到:

var userService = require('./user.service');

因爲對於進口服務的路徑應該是相對於導入服務。

+0

我剛試過這個方法,得到了相同的類型錯誤信息。我認爲這可能是緩存問題,所以我npm清除緩存,但錯誤仍然存​​在。 – leo277