как требовать класс в node.js

57
3

мой код, который работает.

var express=require("express"),
app=express();

class bar {
constructor()
{
this.user_name=null;
this.user_surname=null;
this.user_age=null;
}

name(user_name) {
this.user_name=user_name;
return this;
}

surname(user_surname) {
this.user_surname=user_surname;
return this;
}

age(user_age) {
this.user_age=user_age;
return this;
}

get(callback) {

var list ={};

list.uname=this.user_name;
list.usurname=this.user_surname;
list.uage=this.user_age;

callback(list);
}

}

app.get("/liste/:ext",function(req,res){

var ext=req.params.ext;

res.setHeader('Content-Type', 'application/json');

if(ext==1)
{
var newbar=new bar();
newbar.name("alex").surname("broox").age(32).get(function(result){
res.json({data:result})
})

}

if(ext==2)
{
var newbar=new bar();
newbar.name("alex2").get(function(result){
res.json({data:result})
})
}

})

app.listen(4000,function(log){
console.log("listening")
})

но.. следующий код не работает.. с требованием этого класса из другого файла..

test.js

module.exports = {

class bar {
constructor()
{
this.user_name=null;
this.user_surname=null;
this.user_age=null;
}

name(user_name) {
this.user_name=user_name;
return this;
}

surname(user_surname) {
this.user_surname=user_surname;
return this;
}

age(user_age) {
this.user_age=user_age;
return this;
}

get(callback) {

var list ={};

list.uname=this.user_name;
list.usurname=this.user_surname;
list.uage=this.user_age;

callback(list);
}

}

};

файл app.js.. с требованием этого класса

var express=require("express"),
app=express();

require("./test")

app.get("/liste/:ext",function(req,res){

var ext=req.params.ext;

res.setHeader('Content-Type', 'application/json');

if(ext==1)
{
var newbar=new bar();
newbar.name("alex").surname("broox").age(32).get(function(result){
res.json({data:result})
})

}

if(ext==2)
{
newbar.name("alex2").get(function(result){
res.json({data:result})
})
}

})

app.listen(4000,function(log){
console.log("listening")
})

но почему это не работает... пожалуйста, помогите мне... над кодом, который работает, но этот код не работает.

спросил(а) 2016-11-03T17:20:00+03:00 3 года, 12 месяцев назад
1
Решение
135

При экспорте классов в узел вам нужно сначала определить класс, а затем экспортировать класс, используя module.exports за которым следует имя класса, который вы хотите экспортировать.

class bar {
constructor()
{
this.user_name=null;
this.user_surname=null;
this.user_age=null;
}

name(user_name) {
this.user_name=user_name;
return this;
}

surname(user_surname) {
this.user_surname=user_surname;
return this;
}

age(user_age) {
this.user_age=user_age;
return this;
}

get(callback) {

var list ={};

list.uname=this.user_name;
list.usurname=this.user_surname;
list.uage=this.user_age;

callback(list);
}
}
module.exports = bar

Оттуда вы можете просто require файл и захватить класс как таковой.

var Bar = require('./test');
var bar = new Bar();

ответил(а) 2016-11-03T17:25:00+03:00 3 года, 12 месяцев назад
58

test.js недействителен синтаксис - вы не должны иметь весь ваш файл, завернутый в фигурные скобки. module.exports - это просто переменная, которую вы установили; если вы хотите экспортировать bar, установите его в bar:

class bar {
...
}

module.exports = bar;

Кроме того, вам нужно присвоить результат вашего require вызова в app.js.


var bar = require("./test");

(На немного педантичной ноте - это более идиоматично, чтобы запечатлеть имена классов!)

ответил(а) 2016-11-03T17:24:00+03:00 3 года, 12 месяцев назад
41

привет снова @DominicValenciana

test.js

class bar {
constructor()
{
this.user_name=null;
this.user_surname=null;
this.user_age=null;
}

name(user_name) {
this.user_name=user_name;
return this;
}

surname(user_surname) {
this.user_surname=user_surname;
return this;
}

age(user_age) {
this.user_age=user_age;
return this;
}

get(callback) {

var list ={};

list.uname=this.user_name;
list.usurname=this.user_surname;
list.uage=this.user_age;

callback(list);
}

}

module.exports = bar;

app.js

var express=require("express"),
app=express();

app.get("/liste/:ext",function(req,res){

var ext=req.params.ext;

res.setHeader('Content-Type', 'application/json');

if(ext==1)
{
var bar=new require('./test');
bar.name("alex").surname("broox").age(32).get(function(result){
res.json({data:result})
})

}

if(ext==2)
{
var bar=new require('./test');
bar.name("alex2").get(function(result){
res.json({data:result})
})
}

})

app.listen(4000,function(log){
console.log("listening")
})

как ошибка: TypeError: bar.name не является функцией

ответил(а) 2016-11-03T17:37:00+03:00 3 года, 12 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема