node.js require 的对象 无法访问其方法的问题

时间:2014-6-12 10:54

背景:自定义模块引用

环境:OS: win7

        NODE: node v0.10.22

        IDE: webStorm 7.0.1

伪代码:

   commonS.js (这是一个公共的service,供其他服务调用)

 1 var config = require('../config');
 2 var baseDao = require('../dao/baseDao');
 3 var logger = require('../logger');
 4 var mongoose = require('mongoose');
 5 var innSeq = mongoose.model('innerWBSeq');
 6 var async = require('async');
 7 var statusService = require('./statusesS');//注意这里
 8 
 9 
10 function CommonService() {
11   this._MAX_ALIVE = 3 * 60 * 60 * 1000;
12 }
13 
14 /**
15  * 自增当前序列
16  * @param increase
17  * @param type
18  * @param callback
19  */
20 CommonService.prototype.inCreaseInnerSeq = function(increase,type,callback){
21   if(!increase) {
22     increase = 1;
23   }
24 
25   if(!type) {
26   //TODO
27   }
28 
29   baseDao.update('innerWBSeq',{type: type},{$inc : {'id' : increase}},{'upsert':true},callback);
30 };
31
32 module.exports = new CommonService();

      statusesS.js (这是一个service,调用commonS.js中的公共方法)

 1 var async = require('async');
 2 var commonService = require('./commonService');//注意这里
 3 var baseDao = require('../dao/baseDao');
 4 var utils = require('../lib/utils');
 5 var mongoose = require('mongoose');
 6 
 7 function StatusesS() {
 8 
 9 }
10 
11 /**
12  * xxx
13  * @param params
14  * @param callback
15  */
16 StatusesS.prototype.xxx= function(params,callback) {
17   var self = this;
18   var curUserInfo = {};
19   commonService.inCreaseInnerSeq(1,'xx',cb);
20     
21         ...
22        
23 };
24 
25 module.exports = new StatusesS();


问题描述:不小心在,commonsS.js中引用了statusesS.js,又在statusesS.js中引用了commonsS.js,当我们调用commonsS中的方法时(statusesS.js中第19行),node会告诉我们找不到相应的方法。

 

D:\IPTV\project2.0\wb-service\node_modules\mongoose\lib\utils.js:419
        throw err;
              ^
TypeError: Object #<Object> has no method 'inCreaseInnerSeq'
    at Array.StatusesS.insertStatus.async.auto.increaseSeqHandler [as 0] (D:\IPTV\project2.0\wb-service\service\statusesS.js:35:21)
    at async.auto (D:\IPTV\project2.0\wb-service\node_modules\async\lib\async.js:459:38)
    at Array.forEach (native)
    at _each (D:\IPTV\project2.0\wb-service\node_modules\async\lib\async.js:32:24)
    at Object.async.auto (D:\IPTV\project2.0\wb-service\node_modules\async\lib\async.js:430:9)
    at StatusesS.insertStatus (D:\IPTV\project2.0\wb-service\service\statusesS.js:33:9)
    at Server.Statuses.saveTextStatusREST (D:\IPTV\project2.0\wb-service\controller\statuses.js:140:21)
    at next (D:\IPTV\project2.0\wb-service\node_modules\restify\lib\server.js:731:30)
    at f (D:\IPTV\project2.0\wb-service\node_modules\restify\node_modules\once\once.js:16:25)
    at Server.data (D:\IPTV\project2.0\wb-service\api.js:106:10)

Process finished with exit code 8

  

问题分析:这个时候,commonS引用对象是这样的

解决方法:我们需要解除commonS.js中对statusesS的引用,也就是删除commonS.js中第七行代码,这个时候再看引用对象的状态,如下图:

 

    

 到此,问题解决了。说得有些啰嗦了,其实也是希望自己下次不再犯类似的错误。

 

转载于:https://www.cnblogs.com/league7/p/3783579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值