78 lines
2.2 KiB
Dart
78 lines
2.2 KiB
Dart
import 'dart:io';
|
|
import 'dart:convert';
|
|
import 'package:mysql1/mysql1.dart';
|
|
import 'package:mess_api/config.dart';
|
|
|
|
Future<int> getTestNumber() async {
|
|
final settings = ConnectionSettings(
|
|
host: DBConfig.dbHost,
|
|
port: DBConfig.dbPort,
|
|
user: DBConfig.dbUser,
|
|
password: DBConfig.dbPassword,
|
|
db: DBConfig.dbName,
|
|
);
|
|
|
|
final conn = await MySqlConnection.connect(settings);
|
|
final results = await conn.query(
|
|
'SELECT test_number FROM test_table LIMIT 1',
|
|
);
|
|
await conn.close();
|
|
|
|
if (results.isEmpty) {
|
|
throw Exception('DB CONNECT FAIL: no data');
|
|
}
|
|
|
|
final value = results.first['test_number'] as int;
|
|
if (value != 777) {
|
|
throw Exception('DB CONNECT FAIL: value=$value');
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
void main() async {
|
|
final server = await HttpServer.bind(
|
|
InternetAddress.anyIPv4,
|
|
AppConfig.port,
|
|
);
|
|
|
|
print('API server running on http://localhost:${AppConfig.port}');
|
|
|
|
await for (HttpRequest request in server) {
|
|
// CORS
|
|
request.response.headers
|
|
..set('Access-Control-Allow-Origin', '*')
|
|
..set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
|
|
..set('Access-Control-Allow-Headers', 'Content-Type');
|
|
|
|
if (request.method == 'OPTIONS') {
|
|
request.response
|
|
..statusCode = HttpStatus.ok
|
|
..close();
|
|
continue;
|
|
}
|
|
|
|
if (request.uri.path == '/db') {
|
|
try {
|
|
final value = await getTestNumber();
|
|
request.response
|
|
..statusCode = HttpStatus.ok
|
|
..headers.contentType = ContentType.json
|
|
..write(jsonEncode({'value': value}))
|
|
..close();
|
|
} catch (e) {
|
|
request.response
|
|
..statusCode = HttpStatus.internalServerError
|
|
..headers.contentType = ContentType.json
|
|
..write(jsonEncode({'error': e.toString()}))
|
|
..close();
|
|
}
|
|
continue;
|
|
}
|
|
|
|
request.response
|
|
..statusCode = HttpStatus.notFound
|
|
..close();
|
|
}
|
|
}
|