2017-03-20 27 views
0

我很难理解如何将单独的.js文件导入到我的index.js节点文件中。NodeJS中的JavaScript类和模块

我创建了一个文件pokemon.js,如下图所示:

var pokemon = (function(){ 

    function Pokemon(name) { 

    this.name = name; 
    console.log("pokemon"); 
    } 

})(); 

module.exports.Pokemon = pokemon; 
我index.js

,现在我想使用它:

var Pokemon = require('./models/pokemon.js'); 

//我怎么叫口袋妖怪功能?

UPDATE

var Pokemon = require('./models/models.js'); 
var app = express(); 

var pokemons = []; 

app.get("/pokemon/all",function(req,res){ 

    var pokemon = Pokemon("Pikachu"); // Pokemon is not a function 



}) 

这里是我找到了解决办法:

models.js:

module.exports = function(name) { 
    this.name = name; 
} 

index.js: 

var Pokemon = require('./models/models.js'); 
var app = express(); 

var pokemons = []; 

app.get("/pokemon/all",function(req,res){ 

    var pokemon = new Pokemon('Pikachu'); 
    pokemons.push(pokemon); 
    res.json(pokemons); 

}) 
+1

您IIFE不返回任何东西,所以'pokemon'是'undefined'。 – 4castle

+1

删除IIFE部分,并使'pokemon =功能口袋妖怪...'。 –

+0

你可以写作是一个答案,所以我有更好的主意?如果口袋妖怪有方法或功能,该怎么办? –

回答

1

我看你要导出的对象构造。

pokemon.js

function Pokemon(name){ 
    this.name = name; 
    console.log(this.name); 
} 
// if any prototype 
Pokemon.prototype.serviceOne = function(){ }; 
Pokemon.prototype.serviceTwo = function(){ }; 


module.exports = Pokemon; 

index.js

var Pokemon = require('path/to/pokemon'); 
app.get("/pokemon/all",function(req,res){ 

    var pikachu= new Pokemon("Pikachu"); 
    pikachu.serviceOne(); 
    pikachu.serviceTwo(); 

}) 
+0

index.js中的代码怎么样? –

+0

我得到同样的东西。口袋妖怪没有定义。同样使用上面的方法,你如何给Pokemon类(函数)添加函数。 –

+0

@johndoe导出为构造函数。编辑。 – NERDYLIZARD

0

的由@catta提供的只是一个小错误尝试:

var pokemon = function(name) { 
this.name = name; 
console.log("pokemon"); 
} 
module.exports.Pokemon = pokemon; 

在index.js

var Pokemon = require('./models.js'); 
Pokemon.Pokemon('name') //output name 
+0

仍然未定义。 –

+0

最后一行看它: Pokemon.Pokemon(“name”); 它不是 口袋妖怪( “名称”); 或粘贴当前代码 – douxsey

+0

刚刚试了一下在我的笔记本电脑@约翰母鹿 'B07 /应用/测试/超过$更models.js VAR口袋妖怪=功能(名称){ this.name =名称; console.log(“pokemon”); } module.exports。口袋妖怪=口袋妖怪; douxsey @ douxsey-CR70-2M-CX70-2OC-CX70-2OD:/ mnt/9aa1c3fe-f4e9-4867-afef-8ab2db92eb07/apps/test/over $ more index.js var Pokemon = require('./ models的.js'); Pokemon.Pokemon('name')//输出名称 douxsey @ douxsey-CR70-2M-CX70-2OC-CX70-2OD:/ mnt/9aa1c3fe-f4e9-4867-afef-8ab2db92eb07/apps/test/over $ node index.js pokemon ' – douxsey

0

pokemon.js

var pokemon = function(str){ 
    this.name = str; 
    console.log(this.name); 
}; 
module.exports.Pokemon = pokemon; 

main.js

var Pokemon = require('./models/models.js'); 
var app = express(); 
var pokemons = []; 
app.get("/pokemon/all",function(req,res){ 
    pokemons.push(Pokemon.Pokemon("Pikachu")); 
}) 

当您设置VAR关键要求是该文件只是引用。因此,你需要 “Pokemon.Pokemon()”

+0

如果我正在使用上述技术,我如何添加Prototype函数到我的口袋妖怪对象。 –

+0

您可以: 'pokemon.prototype.f = function(){}' – cs378