2015-06-13 44 views
0

我剛剛開始使用Node並編寫了一個如下所示的小型S3讀取器。它位於projectRoot/routes/S3Store.js目錄中。現在包含一個模塊到另一個節點JS文件

var AWS = require('aws-sdk'), 
uploader = require('s3-upload-stream')(new AWS.S3()), 
Q = require('q'); 

module.exports = S3Store; 

function S3Store(config) { 
    this.config = config; 
    this.s3 = new AWS.S3({ 
    region: config.aws.region 
    }); 
} 

S3Store.prototype.readStream = function (filePath, metadata) { 
var readConfig = { 
    'Bucket': this.config.s3.bucketName, 
    'Key': filePath 
    }; 
return this.s3.getObject(readConfig).createReadStream(); 
} 

,我在projectRoot /路由/ S3StoreMain.js創建一個新文件S3StoreMain.js,我試圖進口S3Store.js模塊是這樣的:

var s3 = require('S3Store'); 

上運行:

node S3StoreMain.js 

找不到模塊S3Store。以下是堆棧跟蹤:

[email protected]:~/Downloads/node-v0.12.4/exp2014$ node routes/S3StoreMain.js 

module.js:340 
    throw err; 
    ^
Error: Cannot find module 'S3Store' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (/home/shubham/Downloads/node-v0.12.4/exp2014/routes/S3StoreMain.js:1:72) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
[email protected]:~/Downloads/node-v0.12.4/exp2014$ 

我錯過了什麼?

+3

嘗試做'var s3 = require('./ S3Store');' –

+0

剛剛嘗試......沒有幫助。 –

+0

嘗試將'module.exports = S3Store;'放在文件末尾。 –

回答

1

Read this NodeJS API Reference

爲了需要的模塊文件比較,你需要使用相對路徑......這是怎麼要求模塊設計:在的NodeJS(閱讀鏈接以獲取更多信息的API文檔)

嘗試需要從S3StoreMain的S3Store文件文件,像這樣:

var s3 = require("./S3Store"); 

可以省略".js",它是可選的。


需要注意的是每個人都在說,你需要把你的modules.exports在文件的結尾......這是!由於你如何定義你的功能,引用應該沒有關係。

1

你得給require裏面的參數模塊的相對路徑,如果它不是一個新公共管理模塊,因爲,如果你只會給該模塊的名稱require,它會爲它在node_modules文件夾進行搜索。

所以,使用下面的相對路徑,我希望它能解決你的問題。 var s3 = require('./S3Store.js');

此外,請嘗試將module.exports語句放在文件末尾。

+0

因爲他如何定義函數,所以放置'module.exports'的位置並不重要。 [見這JSFiddle的參考](http://jsfiddle.net/9wswbxue/1/) –

+0

@Jamen:是的,你是對的...我明白了.. – amulya349

0

正如很多人所建議的,在調用模塊時需要使用相對路徑。所以,像這樣的東西適合我:

var s3 = require('./S3Store'); 

由於我只能接受一個答案,我會選擇一個最好的解釋。

相關問題