我刚开始使用Node并编写了一个类似于以下内容的S3读取器。它位于 projectRoot / routes / S3Store.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 / routes / S3StoreMain.js 中创建了一个新文件 S3StoreMain.js ,我正在尝试导入 S3Store.js 模块如下:
var s3 = require('S3Store');
跑步时:
node S3StoreMain.js
找不到模块S3Store
。这是堆栈跟踪:
shubham@turing:~/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)
shubham@turing:~/Downloads/node-v0.12.4/exp2014$
我错过了什么?
答案 0 :(得分:1)
如果模块不是npm模块,你必须在require
参数内给出模块的相对路径,因为如果你只是在require
中给出模块的名称,它将搜索在node_modules
文件夹中。
所以,使用以下相对路径,我希望它能解决您的问题。
var s3 = require('./S3Store.js');
另外,尝试将module.exports
语句放在文件末尾。
答案 1 :(得分:1)
Read this NodeJS API Reference
为了相对需要模块文件,你需要使用相对路径...这就是如何在NodeJS中设计require模块(阅读链接的API文档以获取更多信息)
尝试从S3StoreMain文件中请求S3Store文件,如下所示:
var s3 = require("./S3Store");
您可以省略".js"
,它是可选的。
请注意,每个人都说您需要将modules.exports
放在文件的末尾...这是 false !!由于您定义了函数的方式,引用无关紧要。
答案 2 :(得分:0)
许多人建议,在调用模块时需要使用相对路径。所以,这样的事情对我有用:
var s3 = require('./S3Store');
由于我只接受一个答案,我会选择一个解释最佳的答案。