Feathers: Express, Koa 및 Hapi와 ν•¨κ»˜ μž‘λ™ν•˜λ„λ‘ Feathers μ„œλ²„ ν”„λ ˆμž„μ›Œν¬λ₯Ό λ…λ¦½μ μœΌλ‘œ λ§Œλ“­λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 03μ›” 12일  Β·  22μ½”λ©˜νŠΈ  Β·  좜처: feathersjs/feathers

이제 Feathersκ°€ ν΄λΌμ΄μ–ΈνŠΈμ™€ λ…λ¦½μ μœΌλ‘œ 라이브러리λ₯Ό μž‘λ™ν•˜λ―€λ‘œ(https://github.com/feathersjs/feathers/pull/193 μ°Έμ‘°), μ„œλ²„μ— λŒ€ν•œ ν•˜λ“œ μ’…μ†μ„±μœΌλ‘œ Expressκ°€ 더 이상 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹  λ‹€λ₯Έ ν”ŒλŸ¬κ·ΈμΈκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ ꡬ성할 수 μžˆλŠ” Express, Koa 및 잠재적으둜 Hapi에 λŒ€ν•΄ λ³„λ„μ˜ λͺ¨λ“ˆμ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν‘œν˜„ν•˜λ‹€

Feathers 2 μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ—…κ·Έλ ˆμ΄λ“œλ₯Ό λ³€κ²½ν•˜λŠ” μœ μΌν•œ 방법은 app.configure(express()) μž…λ‹ˆλ‹€.

const feathers = require('feathers');
const express = require('feathers-express');

const app = feathers()
  // Make this app Express compatible
  .configure(express())
  // Configure REST API that uses Express
  .configure(express.rest());

// Use any Express middleware
app.use(bodyParser.json());
// Use Feathers services normally
app.use('/todos', {
  get(id) {
    return Promise.resolve({ id, description: `You have to do ${id}!` });
  }
});

μ½”μ•„

Koa 지원은 μ—¬λŸ¬ 번 μ™”μŠ΅λ‹ˆλ‹€(#83 및 #58 μ°Έμ‘°). 이제 맀우 μœ μ‚¬ν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

const feathers = require('feathers');
const koa = require('feathers-koa');

const app = feathers()
  // Make this app Koa compatible
  .configure(koa())
  // Configure Koa REST handler
  .configure(koa.rest());

// Use normal Koa middleware
app.use(function *(){
  this.body = 'Hello World';
});

// Use a Feathers service through app.service
app.service('/todos', {
  get(id) {
    return Promise.resolve({ id, description: `You have to do ${id}!` });
  }
});
Breaking Change Feature Proposal

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” μš°λ¦¬κ°€ ν”„λ ˆμž„μ›Œν¬ λŒ€μ‹  Feathersλ₯Ό 라이브러리둜 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ μ „μ†‘μ—μ„œλ„ 더 독립적이 될 κ²ƒμž…λ‹ˆλ‹€.

예:

곡톡 μ½”λ“œ
const feathersApp = feathers().configure(rest());
feathersApp.service('todos', new NeDB('todos'));
export default feathersApp;
ν”„λ ˆμž„μ›Œν¬λ³„

μ½”μ•„

import feathersApp from './feathersApp';
import Koa from 'koa';
import adapter from 'feathers-koa';

const app = new Koa();
app.use(adapter(feathersApp));

ν‘œν˜„ν•˜λ‹€

import feathersApp from './feathersApp';
import express from 'express';
import adapter from 'feathers-express';

const app = express();
app.use(adapter(feathersApp));

기본적으둜 μ–΄λŒ‘ν„°λŠ” νŠΉμ • ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•œ 미듀웨어λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

λͺ¨λ“  22 λŒ“κΈ€

이에 λŒ€ν•œ κ°€μž₯ 큰 μž₯벽은 인증, 특히 μš”μ²­ 및 응닡 κ°œμ²΄μ— μ•‘μ„ΈμŠ€ν•˜λŠ” 방법과 μ—¬κΆŒ 미듀웨어가 Koa와 μž‘λ™ν•˜λŠ” 방법 λ“±μž…λ‹ˆλ‹€.

ν•œλˆˆμ— 봐도 Koa와 λ³„λ°˜ λ‹€λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. req 및 res $ λŒ€μ‹  https://github.com/rkusa/koa-passport-example 및 ctx λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. Hapiλ₯Ό μ‚¬μš©ν•˜λ©΄ ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ Hapiλ₯Ό μ§€μ›ν•˜λŠ” 데 λ§Žμ€ κ°€μΉ˜κ°€ μžˆλ‹€κ³  ν™•μ‹ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ Express와 λ‹€λ₯Έ 점은 μ—†μŠ΅λ‹ˆλ‹€. 적어도 Koaμ—μ„œλŠ” λ°œμ „κΈ° 지원이 μžˆμŠ΅λ‹ˆλ‹€.

IMHO, 더 μœ μ—°ν•˜κ³  ν”„λ ˆμž„μ›Œν¬μ— 묢이지 μ•ŠμœΌλ €λ©΄ λΌμš°νŒ…, μ½˜ν…μΈ  ν˜‘μƒ 등을 μœ„ν•΄ 독립 μ‹€ν–‰ν˜• λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” 것이 더 λ‚˜μ„ κ²ƒμž…λ‹ˆλ‹€.

Koaμ™€μ˜ μ†ŒμΌ“ 지원을 μœ„ν•΄ μ˜κ°μ„ μ–»κΈ° μœ„ν•΄ https://github.com/koajs/koa.ioλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

IMHO, 더 μœ μ—°ν•˜κ³  ν”„λ ˆμž„μ›Œν¬μ— 묢이지 μ•ŠμœΌλ €λ©΄ λΌμš°νŒ…, μ½˜ν…μΈ  ν˜‘μƒ 등을 μœ„ν•΄ 독립 μ‹€ν–‰ν˜• λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” 것이 더 λ‚˜μ„ κ²ƒμž…λ‹ˆλ‹€.

http-framework ! :λˆˆμ§“:

@ahdinosaur λ‚˜μ€‘μ— IMHO둜 κ°€λŠ” μ˜¬λ°”λ₯Έ λ°©λ²•μ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ‚˜λŠ” μš°λ¦¬κ°€ ν”„λ ˆμž„μ›Œν¬ λŒ€μ‹  Feathersλ₯Ό 라이브러리둜 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλ ‡κ²Œ ν•˜λ©΄ μ „μ†‘μ—μ„œλ„ 더 독립적이 될 κ²ƒμž…λ‹ˆλ‹€.

예:

곡톡 μ½”λ“œ
const feathersApp = feathers().configure(rest());
feathersApp.service('todos', new NeDB('todos'));
export default feathersApp;
ν”„λ ˆμž„μ›Œν¬λ³„

μ½”μ•„

import feathersApp from './feathersApp';
import Koa from 'koa';
import adapter from 'feathers-koa';

const app = new Koa();
app.use(adapter(feathersApp));

ν‘œν˜„ν•˜λ‹€

import feathersApp from './feathersApp';
import express from 'express';
import adapter from 'feathers-express';

const app = express();
app.use(adapter(feathersApp));

기본적으둜 μ–΄λŒ‘ν„°λŠ” νŠΉμ • ν”„λ ˆμž„μ›Œν¬μ— λŒ€ν•œ 미듀웨어λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

@daffl 방금 정신을 ν™•μΈν–ˆλŠ”λ° 맀우 깔끔해 λ³΄μž…λ‹ˆλ‹€. μ΅μŠ€ν”„λ ˆμŠ€μ—μ„œ 깃털을 λΆ„λ¦¬ν•˜λŠ” 것은 λ†€λΌμš΄ μΌμž…λ‹ˆλ‹€. express와 λ‹€λ₯Έ λ§Žμ€ μƒˆλ‘œμš΄ κ΅¬ν˜„μ΄ 증가함에 따라 ν–₯ν›„ νŽ˜λ”κ°€ λ”μš± κ°•λ ₯ν•΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€. 이에 λŒ€ν•œ 결정이 μžˆμŠ΅λ‹ˆκΉŒ?

이 인증 PR https://github.com/feathersjs/feathers-authentication/pull/336 은 μ•„λž˜μ— μžˆλŠ” λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ μœ μΌν•œ μ£Όμš” 뢀뢄이어야 ν•©λ‹ˆλ‹€.

λ‚˜λŠ” μ§€λ‚œ λ©°μΉ  λ™μ•ˆ 이것에 λŒ€ν•΄ 더 λ§Žμ€ 생각을 ν–ˆκ³  이제 μš°λ¦¬κ°€ Aukλ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λŠ” 데 κ°€κΉŒμ›Œμ§€κ³  있기 λ•Œλ¬Έμ— 이것이 Buzzard 릴리슀의 μ£Όμš” λͺ©ν‘œκ°€ 될 κ²ƒμž…λ‹ˆλ‹€. μ‚¬μš© 숫자λ₯Ό 보면 λͺ¨λ“ˆμ‹μœΌλ‘œ λ˜μ–΄ μžˆλŠ” 만큼 ExpressλŠ” 아무데도 가지 μ•ŠμŠ΅λ‹ˆλ‹€. μž‘λ…„μ— 7000만 λ‹€μš΄λ‘œλ“œ λ₯Ό κΈ°λ‘ν–ˆμœΌλ©° KoaλŠ” 140만 λ‹€μš΄λ‘œλ“œ, HapiλŠ” ~240만 λ‹€μš΄λ‘œλ“œλ₯Ό κΈ°λ‘ν–ˆμŠ΅λ‹ˆλ‹€.

_이 μˆ˜μΉ˜λŠ” λΉŒλ“œ μ‹œμŠ€ν…œ, 배포 λΉˆλ„, 배포 크기 등에 μ˜ν•΄ μΈμœ„μ μœΌλ‘œ λΆ€ν’€λ €μ§ˆ 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ†”μ§νžˆ λ§ν•΄μ„œ 숫자λ₯Ό 보면 ν‘œν˜„ν•˜λŠ” 것 μ™Έμ—λŠ” 지지할 동기가 λ³„λ‘œ μ—†μŠ΅λ‹ˆλ‹€. λ‚΄κ°€ λ³΄λŠ” μ£Όμš” μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • http2 지원(μ΄λŠ” κ²°κ΅­ express5에 λ‚˜μ˜¬ 것 κ°™μŠ΅λ‹ˆλ‹€....)
  • μ˜μ‘΄μ„± κ°μ†Œ. μƒνƒœ λΉ„μ €μž₯ API λ˜λŠ” 마이크둜 μ„œλΉ„μŠ€λ₯Ό ꡬ좕할 λ•Œ μ›μ‹œ λ…Έλ“œ http(s) λ˜λŠ” 더 μ΅œμ†Œν•œμ˜ 것을 μ‚¬μš©ν•  수 있음(κΈ°λ³Έ νŽ˜λ” μ‚¬μš© 사둀)
  • 미래의 증거 πŸ‘
  • 더 λͺ¨λ“ˆν™”λ˜μ–΄ λΌμš°ν„°, ν…œν”Œλ¦Ώ 엔진 등을 ꡐ체할 수 μžˆμŠ΅λ‹ˆλ‹€. FeathersλŠ” μ‹€μ œλ‘œ 핡심 기술 μœ„μ— μžˆλŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ + μœ ν‹Έλ¦¬ν‹° λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€.

λ‚΄ 생각에 Express μ΄μ™Έμ˜ 첫 번째 "엔진"은 Koa일 κ²ƒμž…λ‹ˆλ‹€. Express와 λ””μžμΈμ΄ κ°€μž₯ μœ μ‚¬ν•˜λ©° ν–₯ν›„ ES6/ES7 μ–Έμ–΄ κΈ°λŠ₯에 λŒ€ν•œ ν›Œλ₯­ν•œ 지원을 μ œκ³΅ν•©λ‹ˆλ‹€. λ˜ν•œ κ°€μž₯ 많이 μš”μ²­ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 개인적으둜 μ›μ‹œ λ…Έλ“œ 라이브러리λ₯Ό μ§€μ›ν•˜κ³  μ‹Άμ§€λ§Œ λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

무슨 일이 μΌμ–΄λ‚˜μ•Ό

  • [ ] 곡톡 μ΅œμƒμœ„ Feathers APIλ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€. λ‚˜λŠ” μš°λ¦¬κ°€ μ•„λž˜μ—μ„œ 적어도 ν•˜λ‚˜μ˜ λ‹€λ₯Έ 엔진을 μ‹œλ„ν•  λ•ŒκΉŒμ§€ 이것을 μ™„μ „νžˆ 식별할 수 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같이 μ‰½κ²Œ β€οΈν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

    const feathers = require('feathers');
    const app = feathers();
    
    // use by string name
    app.engine('express');
    
    // or pass the engine with string
    const koa = require('koa');
    app.engine('koa', koa);
    
    // or simply pass the engine. I like this best
    const koa = require('koa');
    app.engine(koa);
    

    이것은 @jeffijoe κ°€ μ œμ•ˆν•œ 것과 κ°œλ…μ μœΌλ‘œ μœ μ‚¬ν•˜μ§€λ§Œ μ‚¬λžŒλ“€μ΄ Feathers μ•±κ³Ό 직접 μƒν˜Έ μž‘μš©ν•˜κ³  μžˆλ‹€κ³  λŠλΌλ„λ‘ ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 그것이 더 κΉ¨λ—ν•œ APIλ₯Ό λ§Œλ“€ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬κ°€ μˆ˜λ§Žμ€ 방법을 μ‹œλ°ν•΄μ•Ό ν•  μˆ˜λ„ 있기 λ•Œλ¬Έμ— λ§ν•˜κΈ°μ—λŠ” 쑰금 이λ₯΄λ‹€κ³  ν•©λ‹ˆλ‹€. μ΅œμƒμœ„ APIλ₯Ό κ²°μ •ν•˜κΈ° 전에 μΆ”κ°€ 쑰사가 ν•„μš”ν•©λ‹ˆλ‹€.

  • [ ] μ‚¬μš©λ˜λŠ” λͺ¨λ“  μ΅μŠ€ν”„λ ˆμŠ€ λ©”μ„œλ“œκ°€ 폴리필(polyfill), 앨리어싱(aliased)인지 ν™•μΈν•˜κ±°λ‚˜ μ˜μ‘΄μ„±μ„ μ œκ±°ν•©λ‹ˆλ‹€. λ”μžˆμ„ 수 μžˆμ§€λ§Œ λ‚΄ 머리 κΌ­λŒ€κΈ°μ—μ„œ 생각할 μˆ˜μžˆλŠ” 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    • app.get

    • app.set

    • app.render

    • app.send

    • app.json

    • req.accepts

    • req.xhr

  • [ ] 인증 엔진/전솑 λΆˆκ°€μ§€λ‘ μœΌλ‘œ μ„€μ •(https://github.com/feathersjs/feathers-authentication/pull/336)
  • [ ] REST 경둜λ₯Ό λ“±λ‘ν•˜λŠ” 방법을 별칭/λ³€κ²½ν•©λ‹ˆλ‹€.
  • [ ] 별칭/μ†ŒμΌ“ μ„€μ • 방법 λ³€κ²½

더 λ§Žμ€ 것듀이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. @daffl 은 특히 β€‹β€‹μ†ŒμΌ“/레슀트 μ„€μ •κ³Ό κ΄€λ ¨ν•˜μ—¬ 더 λ‚˜μ€ 아이디어λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€.

기타 κ³ λ € 사항

  • Express의 λͺ¨λ“  HTTP 동사 λ©”μ„œλ“œλ₯Ό 지원할 μ˜ˆμ •μž…λ‹ˆκΉŒ? 많이 μžˆμŠ΅λ‹ˆλ‹€. 그것은 λ§Žμ€ Expressλ₯Ό κ΅¬ν˜„ν•œλ‹€λŠ” 것을 μ˜λ―Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?
  • ν˜„μž¬ μš°λ¦¬κ°€ μ˜μ‘΄ν•˜κ³  μžˆλŠ” Express κ΄€λ ¨ 사항은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?
  • app 개체의 μ–΄λ–€ λ„μš°λ―Έ λ©”μ„œλ“œλ₯Ό 핡심 Feathers API의 μΌλΆ€λ‘œ μœ μ§€ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?
  • Express 5λŠ” μ–΄λ–€ μ œμ•ˆμ„ ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ˜€λžœλ§Œμ— λ΄€μŠ΅λ‹ˆλ‹€. @dougwilson κ³Ό μ—°κ²°ν•˜μ—¬ 도움을 쀄 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€(이해가 λ˜λŠ” 경우 ν•΄λ‹Ή 주방에 이미 μΆ©λΆ„ν•œ μš”λ¦¬μ‚¬κ°€ μžˆμ„ 수 있음).
  • @dougwilson 이 μž‘μ—… 쀑인 λͺ¨λ“ˆμ΄λ‚˜ Spiritjs , http-framework λ“±κ³Ό 같은 λͺ¨λ“ˆμ΄ μžˆμŠ΅λ‹ˆκΉŒ? 핡심 λ…Έλ“œ κΈ°λŠ₯ μœ„μ— ν•΄λ‹Ή 좔상화λ₯Ό λ‹€μ‹œ μž‘μ„±ν•  ν•„μš” 없이 λͺ¨λ“ˆμ„±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
// or simply pass the engine. I like this best
const koa = require('koa');
app.engine(koa);

λ™μ˜! 이런 μ‹μœΌλ‘œ μ‚¬λžŒλ“€μ€ Feathersλ₯Ό ν•œ 번 배우고 μ–΄λŒ‘ν„°κ°€ μžˆλŠ” λͺ¨λ“  μ„œλ²„μ— 배포할 수 μžˆμŠ΅λ‹ˆλ‹€. 쒋은 아이디어!

λ¬Έμ œλŠ” 헀더와 같은 μ—°κ²° κ΄€λ ¨ ν•­λͺ©μ— μ˜μ‘΄ν•˜λŠ” 라이브러리λ₯Ό λ³€ν™˜ν•˜λŠ” 데 μžˆμŠ΅λ‹ˆλ‹€.

인기도 μ½˜ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ μ œκ°€ Koaλ₯Ό μ‚¬μš©ν•˜κ³  싢은 κ°€μž₯ 큰 μ΄μœ λŠ” 인기가 있기 λ•Œλ¬Έμ΄ μ•„λ‹ˆλΌ(μ΅μŠ€ν”„λ ˆμŠ€λ§ŒνΌμ€ μ•„λ‹ˆμ§€λ§Œ) 미듀웨어 였λ₯˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” μΈ‘λ©΄μ—μ„œ 더 μ•ˆμ •μ μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

씬 API κ²Œμ΄νŠΈμ›¨μ΄(ν΄λž˜μ‹ μ›Ή μ„œλ²„)에 더 μ ν•©ν•œ μ•„ν‚€ν…μ²˜λ‘œ Feathersλ₯Ό μ΄λ™ν•˜κ³  독립 μ‹€ν–‰ν˜•μœΌλ‘œ 배포할 수 있고 ν”„λ‘œν† μ½œμ— 독립적이며 관심 μžˆλŠ” λ©”μ‹œμ§€(예: λͺ¨λ²” 사둀 Micro Service 무늬). 그런 λ‹€μŒ Seneca 및 기타 인기 μžˆλŠ” Node.js Micro Services ν”„λ ˆμž„μ›Œν¬μ™€ μ›ν™œν•˜κ²Œ 톡합할 수 μžˆμŠ΅λ‹ˆλ‹€.

그리고 예, FeathersJSλŠ” Express, Koa, Hapi, 무엇이든 간에 λΆˆκ°€μ§€λ‘ μ μ΄μ–΄μ•Ό ν•©λ‹ˆλ‹€...
HTTP2/Pushκ°€ μžˆλŠ” Nginxμ—μ„œλ„ 보고 μ‹ΆμŠ΅λ‹ˆλ‹€. :)

ν–‰λ³΅ν•œ λ‚ λ“€!

μ—¬λŸ¬λΆ„ 이거 https://github.com/fastify/fastify λ³΄μ…¨λ‚˜μš”?

FeathersJS와 ν•¨κ»˜ μ‚¬μš©ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 이 문제의 μƒνƒœλŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

@andreafalzetti λŠ” μ—¬μ „νžˆ μ „μ§„ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ 진행 상황을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€: https://github.com/feathersjs/feathers-express/issues/3

예, 깃털을 fastify와 ν†΅ν•©ν•˜λŠ” 것은 맀우 달콀할 κ²ƒμž…λ‹ˆλ‹€! ν•΄λ³΄μž :)

κΈ°λ³Έ 톡합은 맀우 간단해야 ν•˜μ§€λ§Œ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 인증(특히 μ—¬κΆŒ 및 oAuth)μž…λ‹ˆλ‹€.

우리의 κ³„νšμ€ Express에 λŒ€ν•œ μ—„κ²©ν•œ 쒅속성을 μ œκ±°ν•˜κ³  v3 이후 톡합이 의미 μžˆλŠ” 것을 μ‘°μ‚¬ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ§€λ‚œ 주에 Fastify에 λŒ€ν•œ 강연을 λ³΄μ•˜λŠ”λ° ν₯λ―Έλ‘­κΈ΄ ν–ˆμ§€λ§Œ, Fastifyκ°€ μ£Όμš” ν†΅ν•©μœΌλ‘œ μ‚¬μš©ν•˜κ³  μžˆλŠ” λΌμš°ν„°μ™€ ν•¨κ»˜ Feathersκ°€ λ…Έλ“œ HTTP(및 HTTP2!)λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 훨씬 더 합리적일 수 μžˆμŠ΅λ‹ˆλ‹€.

참고둜 μ €λŠ” feather-rest-koa μ—μ„œ feather-koa REST 톡합 μž‘μ—…μ„ μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

REST ν΄λΌμ΄μ–ΈνŠΈλ₯Ό λ³„λ„μ˜ λͺ¨λ“ˆ/νŒ¨ν‚€μ§€ 및 λ¦¬ν¬μ§€ν† λ¦¬λ‘œ μΆ”μΆœν•˜λŠ” 것이 합리적이라고 μƒκ°ν•©λ‹ˆλ‹€.)

ν΄λΌμ΄μ–ΈνŠΈλŠ” 이미 https://github.com/feathersjs/feathers-rest-client 에 μžˆμŠ΅λ‹ˆλ‹€. https://github.com/feathersjs/feathers-express/issues/3 by @christopherjbaker

Feathers의 μ΄ˆλ³΄μžλ‘œμ„œ: 2018λ…„κΉŒμ§€ FeathersλŠ” Expressμ—μ„œ μ™„μ „νžˆ λ…λ¦½μ μž…λ‹ˆκΉŒ?

νŽΈμ§‘: λ˜λŠ” λ‹€λ₯Έ 말둜: μ§€μ›λ˜λŠ” λ‹€λ₯Έ ν”„λ ˆμž„μ›Œν¬. KOAκ°€ μ™„λ²½ν•˜κ²Œ μ§€μ›λ˜λ‚˜μš”?

감사 ν•΄μš”! ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬λž‘ν•˜κ³  노고에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

@daffl μ—κ²Œ λ¬Όμ–΄λ³΄μ„Έμš”. κ·ΈλŠ” μž‘μ—… μ€‘μ΄μ—ˆμŠ΅λ‹ˆλ‹€... ν˜„μž¬ 상황은 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

FeathersλŠ” ν”„λ ˆμž„μ›Œν¬μ— λ…λ¦½μ μ΄μ§€λ§Œ(예: @feathersjs/socketio 와 ν•¨κ»˜ μ‚¬μš©ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ„œλΉ„μŠ€μ™€ ν†΅μ‹ ν•˜κΈ° μœ„ν•œ 독립 μ‹€ν–‰ν˜• ν΄λΌμ΄μ–ΈνŠΈλ‘œλ§Œ μ‚¬μš©ν•  수 있음) Express에 λŒ€ν•œ HTTP API λ°”μΈλ”©λ§Œ μžˆμŠ΅λ‹ˆλ‹€( @feathersjs/express ).

Feathers의 μš”μ μ€ ν”„λ‘œν† μ½œ νŠΉμ • 사항을 μΆ”μƒν™”ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ μ‚¬μš©ν•˜λŠ” HTTP ν”„λ ˆμž„μ›Œν¬λŠ” ꢁ극적으둜 그닀지 μ€‘μš”ν•˜μ§€ μ•Šμ•„μ•Ό ν•˜λ©° Expressμ—μ„œ 인증과 같은 것을 μΆ”μƒν™”ν•˜λŠ” 것은 κ½€ 큰 μž‘μ—…μž…λ‹ˆλ‹€(λͺ¨λ“  PassportλŠ” Express 및 심지어 ν˜„μž¬ Koa 톡합은 μš”μ²­ 개체λ₯Ό μ‚¬μš©ν•˜μ—¬ Express처럼 보이게 ν•˜μ—¬ ν•΄λ‹Ή 사싀을 ν•΄ν‚Ήν•©λ‹ˆλ‹€. μƒˆλ‘œμš΄ ν”„λ ˆμž„μ›Œν¬ 바인딩에 λŒ€ν•œ μ΅œμš°μ„  μˆœμœ„λŠ” μƒˆλ‘œμš΄ μ„œλΉ„μŠ€ 쑰회 λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜μ—¬ Fastify와 μœ μ‚¬ν•œ μ„±λŠ₯을 μ œκ³΅ν•˜κ³  μ›Ή μ†ŒμΌ“ 연결을 훨씬 더 λΉ λ₯΄κ²Œ λ§Œλ“œλŠ” 일반 λ…Έλ“œ HTTPμž…λ‹ˆλ‹€.

이 λ¬Έμ œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•΄μ„œλŠ” 이 λ¬Έμ œμ— λŒ€ν•œ 링크가 μžˆλŠ” μƒˆ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰