그래서 지금까지 node.js
다음과 같은 방식으로 클래스와 모듈을 만들었습니다 .
var fs = require('fs');
var animalModule = (function () {
/**
* Constructor initialize object
* @constructor
*/
var Animal = function (name) {
this.name = name;
};
Animal.prototype.print = function () {
console.log('Name is :'+ this.name);
};
return {
Animal: Animal
}
}());
module.exports = animalModule;
이제 ES6를 사용하여 다음과 같이 “실제”수업을 만들 수 있습니다.
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
자, 우선, 나는 이것을 좋아합니다 🙂 그러나 그것은 질문을 제기합니다. 이것을 node.js
의 모듈 구조 와 결합하여 어떻게 사용 합니까?
데모를 위해 모듈을 사용하려는 클래스가 있다고 가정 해 보겠습니다. fs
따라서 파일을 만듭니다.
Animal.js
var fs = require('fs');
class Animal{
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
이것이 올바른 방법일까요?
또한이 클래스를 내 노드 프로젝트 내의 다른 파일에 어떻게 노출합니까? 이 클래스를 별도의 파일에서 사용하는 경우에도이 클래스를 확장 할 수 있습니까?
여러분 중 일부가이 질문에 답할 수 있기를 바랍니다. 🙂
답변
예, 귀하의 예는 잘 작동합니다.
클래스 노출에 관해서는 export
다른 클래스와 마찬가지로 클래스를 사용할 수 있습니다.
class Animal {...}
module.exports = Animal;
또는 더 짧습니다.
module.exports = class Animal {
};
다른 모듈로 가져 오면 해당 파일에 정의 된 것처럼 처리 할 수 있습니다.
var Animal = require('./Animal');
class Cat extends Animal {
...
}
답변
ES5 방식으로 생성자 이름을 처리 한 것과 동일하게 ES6 클래스 이름을 처리하십시오. 그들은 하나이고 동일합니다.
ES6 구문은 단지 구문 적 설탕이며 정확히 동일한 기본 프로토 타입, 생성자 함수 및 객체를 생성합니다.
따라서 ES6 예제에서 다음을 사용하십시오.
// animal.js
class Animal {
...
}
var a = new Animal();
module.exports = {Animal: Animal};
Animal
객체의 생성자처럼 취급 할 수 있습니다 (ES5에서했던 것과 동일). 생성자를 내보낼 수 있습니다. 를 사용하여 생성자를 호출 할 수 있습니다 new Animal()
. 그것을 사용하는 모든 것이 동일합니다. 선언 구문 만 다릅니다. Animal.prototype
당신의 모든 방법이 아직까지 있습니다 . ES6 방식은 실제로 더 멋지고 더 좋은 구문으로 동일한 코딩 결과를 생성합니다.
가져 오기 측에서는 다음과 같이 사용됩니다.
const Animal = require('./animal.js').Animal;
let a = new Animal();
이 체계는 Animal 생성자를 .Animal
를 해당 모듈에서 둘 이상의 것을 내보낼 수 속성으로 내 보냅니다.
둘 이상의 항목을 내보낼 필요가없는 경우 다음을 수행 할 수 있습니다.
// animal.js
class Animal {
...
}
module.exports = Animal;
그리고 다음을 사용하여 가져옵니다.
const Animal = require('./animal.js');
let a = new Animal();
답변
ES6의 require 방법은 import
. export
클래스를 import { ClassName } from 'path/to/ClassName'
구문을 사용하여 다른 곳으로 가져올 수 있습니다 .
import fs from 'fs';
export default class Animal {
constructor(name){
this.name = name ;
}
print(){
console.log('Name is :'+ this.name);
}
}
import Animal from 'path/to/Animal.js';
답변
노드에서 클래스 사용-
여기서는 ReadWrite 모듈이 필요하고 ReadWrite 클래스의 객체를 반환하는 makeObject ()를 호출합니다. 메서드를 호출하는 데 사용하고 있습니다.
index.js
const ReadWrite = require('./ReadWrite').makeObject();
const express = require('express');
const app = express();
class Start {
constructor() {
const server = app.listen(8081),
host = server.address().address,
port = server.address().port
console.log("Example app listening at http://%s:%s", host, port);
console.log('Running');
}
async route(req, res, next) {
const result = await ReadWrite.readWrite();
res.send(result);
}
}
const obj1 = new Start();
app.get('/', obj1.route);
module.exports = Start;
ReadWrite.js
여기에서는 객체를 사용할 수없는 경우에만 객체가 반환되도록하는 makeObject 메서드를 만듭니다.
class ReadWrite {
constructor() {
console.log('Read Write');
this.x;
}
static makeObject() {
if (!this.x) {
this.x = new ReadWrite();
}
return this.x;
}
read(){
return "read"
}
write(){
return "write"
}
async readWrite() {
try {
const obj = ReadWrite.makeObject();
const result = await Promise.all([ obj.read(), obj.write()])
console.log(result);
check();
return result
}
catch(err) {
console.log(err);
}
}
}
module.exports = ReadWrite;
자세한 설명은 https://medium.com/@nynptel/node-js-boiler-plate-code-using-singleton-classes-5b479e513f74 로 이동 하십시오.
답변
클래스 파일에서 다음 중 하나를 사용할 수 있습니다.
module.exports = class ClassNameHere {
print() {
console.log('In print function');
}
}
또는이 구문을 사용할 수 있습니다.
class ClassNameHere{
print(){
console.log('In print function');
}
}
module.exports = ClassNameHere;
반면에 다른 파일에서이 클래스를 사용하려면이 단계를 수행해야합니다. 먼저 다음 구문을 사용하여 해당 파일을 요구합니다.
const anyVariableNameHere = require('filePathHere');
그런 다음 개체를 만듭니다.
const classObject = new anyVariableNameHere();
그런 다음 classObject
실제 클래스 변수에 액세스하는 데 사용할 수 있습니다.