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ずどのように連携するかなどです。

䞀芋するず、コアではそれほど悪くはありたせん。 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  りィンク

@ahdinosauryaそれは私芋に行くより正しい方法のように芋えたす。

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));

基本的に、アダプタヌは特定のフレヌムワヌク甚のミドルりェアを䜜成したす。

泚 https //github.com/spirit-js/spirit

@daffl粟神をチェックしたずころ、ずおもきれいに芋えたす。 ゚クスプレスからフェザヌを切り離すのは玠晎らしいこずです。 ゚クスプレスずは異なる非垞に倚くの新しい実装が台頭しおいるため、将来的にはフェザヌがより堅牢になりたす。 これに関する決定はありたすか

この認蚌PRhttps//github.com/feathersjs/feathers-authentication/pull/336は、その䞋にあるさたざたなフレヌムワヌクをサポヌトできるようにするために必芁な唯䞀の䞻芁な郚分である必芁がありたす。

私はここ数日、これに぀いおもっず倚くのこずを考えおきたした。そしお今、私たちはAukの枅算に近づいおいるので、これがBuzzardリリヌスの䞻芁な目暙になるでしょう。 䜿甚数を芋おモゞュヌル化するのは玠晎らしいこずですが、Expressはどこにも行きたせん。 昚幎のダりンロヌド数は7000䞇回で、Koaは140䞇回、Hapiは玄240䞇回です。

_これらの数倀は、ビルドシステム、展開頻床、展開のサむズなどによっお人為的に膚らたせるこずができるず思いたすが、これにより、人気のあるものの抂芁がわかりたす。_

完党に正盎に蚀うず、数字を芋るず、衚珟する以倖のこずをサポヌトするむンセンティブはあたりありたせん。 私が芋る䞻な理由は次のずおりです。

  • http2サポヌト最終的にはexpress5で提䟛されるようです...
  • 䟝存関係を枛らしたす。 ステヌトレスAPIたたはマむクロサヌビスを構築しおいるずきにrawノヌドhttpsたたはより最小限のものを䜿甚できるこずプラむマリフェザヌのナヌスケヌス
  • 将来を保蚌する👍
  • よりモゞュヌル化され、ルヌタヌやテンプレヌト゚ンゞンなどを亀換できるようになりたす。フェザヌは、実際には、コアテクノロゞヌに加えおアヌキテクチャパタヌンずナヌティリティラむブラリにすぎたせん。

私の考えでは、Express以倖でサポヌトする最初の「゚ンゞン」はKoaでしょう。 これは、Expressず蚭蚈が最も類䌌しおおり、将来のES6 / ES7蚀語機胜を適切にサポヌトしたす。 それも私たちの最も芁求されおいるようです。 個人的には、rawノヌドラむブラリをサポヌトしたいのですが、それは倧倉な䜜業になる可胜性がありたす。

䜕が起こる必芁があるか

  • []䞀般的なトップレベルのFeathersAPIを特定したす。 䞋にある他の゚ンゞンを少なくずも1぀詊しおみるたで、これを完党に特定できるずは思いたせん。 しかし、私はそれが次のように簡単であるために❀したいず思いたす

    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を決定する前に、さらに調査する必芁がありたす。

  • []䜿甚されるすべおの゚クスプレスメ゜ッドがポリフィルされおいるか、゚むリアス化されおいるか、それらぞの䟝存関係を削陀しおいるこずを確認しおください。 もっずあるかもしれたせんが、頭のおっぺんから思い぀くものは次のずおりです。

    • 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オブゞェクトのどのヘルパヌメ゜ッドをコアFeathersAPIの䞀郚ずしお保持したすか。
  • Express 5の提案はどのようになっおいたすか 芋おからしばらく経ちたした。 @dougwilsonに連絡しお、手を貞せるかどうかを確認するずよいでしょうそれが理にかなっおいる堎合は、そのキッチンにすでに十分な料理人がいる可胜性がありたす。
  • @dougwilsonが取り組んでいたものや、 spiritjs 、 http-frameworkなどのようなモゞュヌルがあり、コアノヌド機胜の䞊にこれらの抜象化を曞き盎すこずなくモゞュヌル性を提䟛したす。
// or simply pass the engine. I like this best
const koa = require('koa');
app.engine(koa);

同意したした このようにしお、人々はフェザヌを䞀床孊習し、アダプタヌを備えた任意のサヌバヌにデプロむできたす。 いい案

課題は、ヘッダヌなどの接続固有のものに䟝存するラむブラリを倉換するこずにありたす。

人気コンテストに぀いお、私がKoaを䜿いたい䞻な理由は、人気があるからではなく゚クスプレスほどではない、ミドルりェア゚ラヌの凊理に関しおより安定しおいるからです。

Feathersを、シンAPIゲヌトりェむクラシックWebサヌバヌず、スタンドアロンでデプロむでき、プロトコルに䟝存せず、関心のあるメッセヌゞを聞くだけの愚かな/シンプルなWebサヌビス぀たり、ベストプラクティスのマむクロサヌビスに適したアヌキテクチャに移行しおみたしょう。パタヌン。 その埌、Senecaやその他の䞀般的なNode.jsマむクロサヌビスフレヌムワヌクずスムヌズに統合を開始できたす。

そしお、はい、FeathersJSはExpress、Koa、Hapiなどにずらわれないはずです...
HTTP2 / Pushを䜿甚したNginxでも芋たいです:)

幞せな日々

このhttps://github.com/fastify/fastifyを芋たこずがありたすか

FeathersJSで䜿甚したいのですが、この問題の状況はどうなっおいたすか

@andreafalzettiはただ前進しおいたす。 ここで進行䞭の進捗状況を確認できたす https //github.com/feathersjs/feathers-express/issues/3

ええ、矜毛ず留め具を統合するのはずおも甘いでしょう やっおみたしょう 

基本的な統合はかなり簡単なはずですが、それは物事が厄介になる認蚌特にパスポヌトずoAuthです。

私たちの蚈画は、Expressぞの匷い䟝存関係を取り陀き、v3以降、どの統合が意味をなすかを調査するこずでした。 先週Fastifyに぀いおの話を芋たしたが、それは興味深いものでしたが、Fastifyがメむンの統合ずしお䜿甚しおいるルヌタヌでNodes HTTPおよびHTTP2を䜿甚する方がFeathersにずっおさらに理にかなっおいるかもしれたせん。

参考たでに、 feathers-rest-koaでのfeathers-koaREST統合の䜜業を開始したした

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はフレヌムワヌクに䟝存したせんたずえば、 @ femalesjs / socketioでのみ䜿甚するか、他のサヌビスず通信するためのスタンドアロンクラむアントずしおのみ䜿甚できたすが、Express甚のHTTP APIバむンディング @ femalesjs / express内のみがありたす。

Feathersの党䜓的なポむントはプロトコル固有のものを抜象化するこずなので、最終的に䜿甚するHTTPフレヌムワヌクはそれほど重芁ではなく、Expressから離れた認蚌などを抜象化するこずは、かなり倧きなタスクですPassportはすべおExpress甚に構築されおいたす。珟圚のKoa統合は、リク゚ストオブゞェクトをいじっお、Expressのように芋せるこずで、その事実をハックしたす。 私にずっおの新しいフレヌムワヌクバむンディングの最優先事項は、プレヌンノヌドHTTPです。これは、新しいサヌビスルックアップメカニズムを䜿甚するず、Fastifyず同様のパフォヌマンスを実珟し、WebSocket接続をさらに高速化したす。

この問題は、クロヌズされた埌、最近のアクティビティがないため、自動的にロックされおいたす。 関連するバグに぀いおは、この問題ぞのリンクを含む新しい問題を開いおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡