ゼロからDartサービスエンドプロジェクトを作成します.
4148 ワード
先日、咸魚の文章を見ました.FutterとDartの三端一体化開発に、一部の人はDartを使ってサービスのコードを書いてみたいと思います.
DartVMの性能はJVMと非常に接近しており、Nodejsと同じ非同期ioの処理方式を加えるとNodejsと同レベルの同時性能を達成することができ、さらにより良い演算性能があり、ほとんどのNodejsの使用シーンに取って代わることができます.
この文章はみんなを連れてゼロからDartサービスエンドプロジェクトを作成します.本稿は知識点を少しずつカバーします.依存ライブラリのインストール はAPIを作成し、GET要求のパラメータとPOST要求のbody を読み取る. mongodbまたは他のデータベースの接続 は、要求プリアンブルを作成し、dbオブジェクトを要求のコンテキスト に拡張する.はAOTコンパイルと配置 を行う.
Dartを取り付ける
MacOS:
Dartプロジェクトを作成します.
フォルダを作成し、pbspec.yamlファイルを作成します.
インストール依存:
モンゴを取り付けるdart:
コードの作成
AOTコンパイルと配置
次にDartVMの性能を求めます.source-codeをAOTコンパイルします.AOTコンパイル後はsource-codeに対して1~2桁の性能を上げられます.
AOTコンパイル:
序文も最後に書いてもいいですよね?
簡単なコードを通して、私達はすでにDart APIサービスを作成しました.そしてAOTコンパイルを行いました.それをもっと生産環境の下で実行するのに適しています.
初めてDartの子供靴を学んで少し収穫することができることを望んで、読んでありがとうございます.
DartVMの性能はJVMと非常に接近しており、Nodejsと同じ非同期ioの処理方式を加えるとNodejsと同レベルの同時性能を達成することができ、さらにより良い演算性能があり、ほとんどのNodejsの使用シーンに取って代わることができます.
この文章はみんなを連れてゼロからDartサービスエンドプロジェクトを作成します.本稿は知識点を少しずつカバーします.
Dartを取り付ける
MacOS:
$ brew tap dart-lang/dart
$ brew install dart
Windows(chocollateyでインストール):c:\ choco install dart-sdk
またはDartオフィシャル文書によるインストールDartプロジェクトを作成します.
フォルダを作成し、pbspec.yamlファイルを作成します.
$ mkdir your_project && cd your_project
$ touch pubspec.yaml
pbspec.yamlファイルの内容:name: your_project
version: 0.0.1
environment:
sdk: '>=2.3.0 <3.0.0'
dependencies:
serral: any
ここに私たちはSerralに依存してexpressまたはkoaの代替品としてサービス開発を追加しました.ソースは200行しかありません.そして非常に簡単な拡張方法を約束しました.Serral APIドキュメントです.インストール依存:
$ pub get
あなたの最初のDartサービスを作成します.$ mkdir lib
$ touch lib/main.dart
編集lib/main.dart:import 'package:serral/main.dart';
void main() {
final app = Serral();
//
app.before(app.addCorsHeaders);
//
app.before((SerralCtx ctx) {
print(ctx.request.uri.toString());
ctx.context['dog'] = 100;
});
//
app.after((SerralCtx ctx) {
print('end');
});
//
app.GET('/', getHome);
app.POST('/dog', postDog);
app.serve(port: 5100);
}
// GET
void getHome(SerralCtx ctx) async {
// ctx.context,
print(ctx.context['dog']);
//
print(ctx.params);
ctx.send(200, 'hello: ${ctx.context['dog']}');
}
// POST
void postDog(SerralCtx ctx) async {
// post body
print(ctx.body);
// ,
await Future.delayed(Duration(milliseconds: 300));
ctx.send(200, 'order');
}
サービスを開始$ dart lib/main.dart
はい、サービスはもう始まりました.serral runing: http://127.0.0.1:5100
どのようにMongodbまたは他のデータドライバを使用しますか?モンゴを取り付けるdart:
dev_dependencies:
mongo_dart: any
方案1、contextを利用してドライバを格納する:コードの作成
import 'package:mongo_dart/mongo_dart.dart';
import 'package:serral/main.dart';
void main() async {
Db db = new Db("mongodb://127.0.0.1:27017/test");
await db.open();
final app = Serral();
app.before((SerralCtx ctx) {
// add mongodb in context
ctx.context['db'] = db;
});
app.GET('/', getHome);
app.serve(port: 5100);
}
void getHome(SerralCtx ctx) async {
Db db = ctx.context['db'];
print(db);
ctx.send(200, 'hello: ${ctx.context['dog']}');
}
スキーム2は、mixinを使用してSerralCtxを拡張します.import 'package:mongo_dart/mongo_dart.dart';
import 'package:serral/main.dart';
// mixin SerralCtx
class MongoCtx with SerralCtx {
Db db;
}
void main() async {
Db db = new Db("mongodb://127.0.0.1:27017/test");
await db.open();
// MongoCtx SerralCtx
final app = Serral(()=> MongoCtx());
app.before((MongoCtx ctx) {
// db
ctx.db = db;
});
app.GET('/', getHome);
app.serve(port: 5100);
}
void getHome(MongoCtx ctx) async {
// db
print(ctx.db);
ctx.send(200, 'hello: ${ctx.context['dog']}');
}
はい、上記の例を通して、サービスにフロントまたはバックの中間キーを簡単に追加できます.またはcontextオブジェクトの内容を拡張して、応答を要求する時に使いやすいです.AOTコンパイルと配置
次にDartVMの性能を求めます.source-codeをAOTコンパイルします.AOTコンパイル後はsource-codeに対して1~2桁の性能を上げられます.
AOTコンパイル:
dart2aot lib/main.dart lib/main.aot
darta otruntimeを使って生産バージョンを起動します.dartaotruntime lib/main.aot
順序序文も最後に書いてもいいですよね?
簡単なコードを通して、私達はすでにDart APIサービスを作成しました.そしてAOTコンパイルを行いました.それをもっと生産環境の下で実行するのに適しています.
初めてDartの子供靴を学んで少し収穫することができることを望んで、読んでありがとうございます.