2017-09-21 174 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