node.js require 的对象 无法访问其方法的问题
2014-06-12 11:27
211 查看
时间:2014-6-12 10:54
背景:自定义模块引用
环境:OS: win7
NODE: node v0.10.22
IDE: webStorm 7.0.1
伪代码:
commonS.js (这是一个公共的service,供其他服务调用)
statusesS.js (这是一个service,调用commonS.js中的公共方法)
问题描述:不小心在,commonsS.js中引用了statusesS.js,又在statusesS.js中引用了commonsS.js,当我们调用commonsS中的方法时(statusesS.js中第19行),node会告诉我们找不到相应的方法。
问题分析:这个时候,commonS引用对象是这样的
解决方法:我们需要解除commonS.js中对statusesS的引用,也就是删除commonS.js中第七行代码,这个时候再看引用对象的状态,如下图:
到此,问题解决了。说得有些啰嗦了,其实也是希望自己下次不再犯类似的错误。
背景:自定义模块引用
环境:OS: win7
NODE: node v0.10.22
IDE: webStorm 7.0.1
伪代码:
commonS.js (这是一个公共的service,供其他服务调用)
var config = require('../config'); var baseDao = require('../dao/baseDao'); var logger = require('../logger'); var mongoose = require('mongoose'); var innSeq = mongoose.model('innerWBSeq'); var async = require('async'); var statusService = require('./statusesS');//注意这里 function CommonService() { this._MAX_ALIVE = 3 * 60 * 60 * 1000; } /** * 自增当前序列 * @param increase * @param type * @param callback */ CommonService.prototype.inCreaseInnerSeq = function(increase,type,callback){ if(!increase) { increase = 1; } if(!type) { //TODO } baseDao.update('innerWBSeq',{type: type},{$inc : {'id' : increase}},{'upsert':true},callback); }; module.exports = new CommonService();
statusesS.js (这是一个service,调用commonS.js中的公共方法)
var async = require('async'); var commonService = require('./commonService');//注意这里 var baseDao = require('../dao/baseDao'); var utils = require('../lib/utils'); var mongoose = require('mongoose'); function StatusesS() { } /** * xxx * @param params * @param callback */ StatusesS.prototype.xxx= function(params,callback) { var self = this; var curUserInfo = {}; commonService.inCreaseInnerSeq(1,'xx',cb); ... }; 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中第七行代码,这个时候再看引用对象的状态,如下图:
到此,问题解决了。说得有些啰嗦了,其实也是希望自己下次不再犯类似的错误。
相关文章推荐
- as3中无法访问空对象引用的属性或方法的问题
- Error #1009: 无法访问空对象引用的属性或方法 --问过的个问题 解决了 记录下
- Node.js访问SQLite数据库获取数据时出错 JSON对象无法转换
- js访问xml之节点对象属性和方法【1】
- 无法访问WinXP机器的问题解决方法
- Dropbox无法访问问题解决方法
- js 跨域访问问题解决方法
- asp.net 文件路径问题,Png图片透明问题,js提示对象不支持属性和方法的解决方案
- 很经典的问题---在VC++ 2005中fstream对象无法访问中文路径下的文件,包括英文路径下的中文名文件。
- PDA访问web service时,“无法连接到远程服务器”问题的解决方法
- JavaScript学习点滴—js对象的四种类型的属性、方法的访问
- AS3 无法访问空对象引用的属性或方法
- 解决TextBox中, JS方法(DatePicker)改变Text内容后, 无法触发OnTextChanged事件的问题
- JS窗口问题处理:使弹出窗口保持前端显示的几种方法,及window窗体对象open()和showModalDialog()用法
- as3载入影片中TypeError:Error #1009:无法访问空对象引用的属性或方法
- 杀毒后出现“Automation服务器无法创建对象”问题的解决方法
- js 对象外部访问或者调用问题
- js中frame对象几种访问方法
- 微软bug解决方法:System.ObjectDisposedException: 无法访问已释放的对象。对象名:“Icon”
- 开发中“错误: 意外地调用了方法或属性访问。” 和 第一行错误 的IE 两个问题( JQ 进行转义字符 , 分页JS 调用 时参数问题。)