将模型导入为对象,而不是在使用Express的Node.js项目中运行

我有一个使用快递的node.js项目。 在这个项目中,我有一个models文件夹,其中包含项目中使用的不同模型。

型号列表

在我的MosaicParTileStreamerS3Only模型中,我有以下几点:

 'use strict'; var GlobalMercator = require('./GlobalMercator.js'); var S3 = require('./S3.js'); var binary = require('binary'); var bufferpack = require('bufferpack'); function MosaicParTileStreamerS3Only() { }; 

进一步进入这个模型,我使用S3没有任何问题:

 MosaicParTileStreamerS3Only.prototype.Init = function(filepath, index, s3config){ var retval = false; this.s3 = new S3(s3config.access_key, s3config.secret_key, s3config.host); var host = s3config.host; var bucket = s3config.bucket; filepath = s3config.tile_directory + filepath; var request = this.s3.getObject(bucket, filepath, false, 0, this.HEADER_SIZE + 5 * this.RESOLUTION_ENTRY_SIZE + this.TILE_COUNT_SIZE + 256 * this.TILE_ENTRY_SIZE); ... 

在第二行放置一个断点( this.s3 = new S3(s3config.access_key, s3config.secret_key, s3config.host); )显示S3作为一个函数被引入。

S3作为功能

我有我的S3Request.js的以下S3Request.js

“严格使用”;

 var S3 = require('./S3.js'); var STDClass = require('stdclass'); var Curl = require('node-libcurl').Curl; var parseString = require('xml2js').parseString; function S3Request(verb, bucket, uri, endpoint){ this.headers = ''; this.endpoint = endpoint; this.verb = verb; this.bucket = bucket; this.uri = (uri !== '' ? '/' + '%2F'.replace('/', encodeURIComponent(uri)) : '/'); ... } 

后来在这个模型中,我尝试使用S3

  var test = new S3(); headers['Authorization'] = S3.getSignature(this.verb + '\n' + this.headers['Content-MD5'] + "\n" + this.headers['Content-Type'] + "\n" + this.headers["Date"] + amz + "\n" + this.resource); 

我得到以下错误:

TypeError:S3不是一个函数

把一个断点放在var test = new S3(); 显示在这个文件中S3被认为是一个对象: S3作为对象

任何线索怎么了?

问题是S3S3Request之间存在循环依赖关系。

请参阅如何处理Node.js中的循环依赖关系