Commit c85b69f3 authored by wudizhanche1000's avatar wudizhanche1000

Init

parent fe7904f3
/.idea/
# Created by .ignore support plugin (hsz.mobi)
/node_modules/
/.idea/
*.js
*.js.map
!systemjs.config.js
import {Injectable} from '@angular/core';
import App from '../models/app';
import {Http} from '@angular/http';
import 'rxjs/add/operator/toPromise';
/**
* Created by weijian on 2016/12/30.
*/
@Injectable()
export class AppService {
constructor(private http: Http) {
}
async getApps(): Promise<App[]> {
return this.http.get('http://localhost/apps').map((response) => {
return response.json();
}).toPromise();
}
}
<div *ngIf="apps">
<ul>
<li *ngFor="let app of apps">
{{app.id}}
</li>
</ul>
</div>
import {Component, OnInit} from '@angular/core';
import App from '../models/app';
import {AppService} from './app.service';
@Component({
selector: 'app',
moduleId: module.id,
templateUrl: 'apps.component.html',
styleUrls: ['apps.component.css']
})
export class AppsComponent implements OnInit {
apps: App[];
constructor(private appService: AppService) {
console.log(module);
}
async ngOnInit() {
await this.getApps();
}
async getApps() {
this.apps = await this.appService.getApps();
}
}
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './mycard.module';
platformBrowserDynamic().bootstrapModule(AppModule);
<nav _ngcontent-ere-195="" class="docs-navbar">
<a _ngcontent-ere-195="" aria-label="Angular Material" md-button="" routerlink="/" href="/" aria-disabled="false"
tabindex="0"><span class="md-button-wrapper">
<img _ngcontent-ere-195="" alt="Angular" class="docs-angular-logo"
src="../../../assets/img/homepage/angular-white-transparent.svg">
<span _ngcontent-ere-195="">Material</span>
</span><!--template bindings={}-->
<div class="md-button-ripple" md-ripple="" mdripplebackgroundcolor="rgba(0, 0, 0, 0)">
<div class="md-ripple-background"></div>
</div>
<div class="md-button-focus-overlay"></div>
</a>
<a _ngcontent-ere-195="" md-button="" routerlink="components" href="/components" aria-disabled="false" tabindex="0"><span
class="md-button-wrapper">Components</span><!--template bindings={}-->
<div class="md-button-ripple" md-ripple="" mdripplebackgroundcolor="rgba(0, 0, 0, 0)">
<div class="md-ripple-background"></div>
</div>
<div class="md-button-focus-overlay"></div>
</a>
<a _ngcontent-ere-195="" md-button="" routerlink="guides" href="/guides" aria-disabled="false" tabindex="0"><span
class="md-button-wrapper">Guides</span><!--template bindings={}-->
<div class="md-button-ripple" md-ripple="" mdripplebackgroundcolor="rgba(0, 0, 0, 0)">
<div class="md-ripple-background"></div>
</div>
<div class="md-button-focus-overlay"></div>
</a>
</nav>
<router-outlet></router-outlet>
\ No newline at end of file
/**
* Created by weijian on 2016/12/30.
*/
import {Component} from '@angular/core';
@Component({
moduleId: module.id,
templateUrl: 'mycard.component.html',
styleUrls: ['mycard.component.css'],
selector: 'mycard',
})
export class MyCardComponent {
constructor() {
}
}
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import 'hammerjs';
import {AppsComponent} from './apps.component';
import {MaterialModule} from '@angular/material';
import {MyCardComponent} from './mycard.component';
import {RoutingModule} from './routing.module';
import {FormsModule} from '@angular/forms';
import {AppService} from './app.service';
import {HttpModule} from '@angular/http';
import 'rxjs/add/observable/of';
import 'rxjs/add/observable/throw';
// Observable operators
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
@NgModule({
imports: [
BrowserModule, MaterialModule.forRoot(), FormsModule, RoutingModule, HttpModule,
],
declarations: [AppsComponent, MyCardComponent],
bootstrap: [MyCardComponent],
providers: [AppService],
})
export class AppModule {
}
/**
* Created by weijian on 2016/12/30.
*/
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import {AppsComponent} from './apps.component';
const routes: Routes = [
{ path: '', redirectTo: '/apps/1', pathMatch: 'full' },
{ path: 'apps/:id', component: AppsComponent},
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
export class RoutingModule {}
/*
Copyright 2016 Google Inc. All Rights Reserved.
Use of this source code is governed by an MIT-style license that
can be found in the LICENSE file at http://angular.io/license
*/
import * as Mongorito from 'mongorito';
import Model = Mongorito.Model;
/**
* Created by weijian on 2016/12/30.
*/
export function field(target: Model, propertyKey: string): any {
return {
get (): any {
return this.get(propertyKey);
},
set (value: any): void {
this.set(propertyKey, value);
}
};
}
/**
* Created by weijian on 2016/12/29.
*/
import {MongoClient, Collection, InsertOneWriteOpResult, DeleteWriteOpResultObject} from 'mongodb';
import pluralize = require('pluralize');
interface Config {
dbSettings: {
connectionString: string;
};
}
const config: Config = require('./../mongodb_config.json');
const promise = MongoClient.connect(config.dbSettings.connectionString);
export class Model {
static get dbName(): string {
return pluralize(this.name.toLowerCase());
}
static async getCollection(): Promise<Collection> {
let db = await promise;
return db.collection(this.dbName);
}
static async deleteOne(filter: Object): Promise<DeleteWriteOpResultObject> {
let collection = await this.getCollection();
return await collection.deleteOne(filter);
}
static async findOne(query: Object): Promise<any|null> {
let collection = await this.getCollection();
let result = await collection.find(query).limit(1).next();
if (result) {
return new this(result);
} else {
return null;
}
}
constructor(o: any) {
for (let [key, value] of Object.entries(o)) {
this[key] = value;
}
}
async save(): Promise<InsertOneWriteOpResult> {
let db = await promise;
return db.collection(Model.dbName).insertOne(this);
}
}
#!/usr/bin/env bash
varnishd -b localhost:3000
npm start
<!DOCTYPE html>
<html>
<head>
<title>MyCard Console</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<base href="/">
<link rel="stylesheet" href="public/stylesheets/style.css">
<link href="node_modules/@angular/material/core/theming/prebuilt/indigo-pink.css" rel="stylesheet">
<!-- Polyfill(s) for older browsers -->
<script src="node_modules/core-js/client/shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>
<script src="systemjs.config.js"></script>
<script>
System.import('app').catch(function (err) {
console.error(err);
});
</script>
</head>
<body>
<mycard>Loading ...</mycard>
</body>
</html>
import {STATUS_CODES} from 'http';
/**
* Created by weijian on 2016/12/29.
*/
export class KoaError extends Error {
constructor(msg: string, public status: number) {
super(msg);
}
}
export class NotFound extends KoaError {
constructor(msg = STATUS_CODES[404]) {
super(msg, 404);
}
}
export const InternalError = new KoaError(STATUS_CODES[500], 500);
import {Db} from 'mongodb';
export async function up(db: Db, next: Function) {
await db.collection('apps').createIndex('id', {unique: true});
next();
}
export async function down(db: Db, next: Function) {
await db.dropCollection('apps');
next();
}
import 'reflect-metadata';
import * as Mongorito from 'mongorito';
import Model = Mongorito.Model;
import {field} from '../db/decorators';
/**
* Created by weijian on 2016/12/28.
*/
interface I18n<T> {
[locale: string]: T;
}
class App extends Model {
@field
id: string;
@field
name: I18n<string>;
@field
parent?: string;
@field
locales: string[];
@field
news: I18n<{title: string, url: string, image: string}[]>;
@field
conference?: string;
@field
data: any;
}
export default App;
/**
* Created by weijian on 2016/12/29.
*/
import {Model} from 'mongorito';
import {field} from '../db/decorators';
type Locale = 'zh-CN' | 'en-US' | 'ja-JP'
type Platform = 'win32' | 'linux' | 'darwin'
export interface Action {
execute: string;
args: string[];
env: {};
open?: string;
}
export class Package extends Model {
@field
version: string;
@field
locale: Locale[];
@field
platform: Platform[];
@field
actions: {[key: string]: Action};
}
{
"dbSettings": {
"connectionString": "mongodb://localhost:27017/mycard"
}
}
\ No newline at end of file
{
"name": "mycard-tarball",
"version": "0.0.1",
"dependencies": {
"accepts": {
"version": "1.3.3",
"from": "accepts@>=1.2.2 <2.0.0",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz"
},
"any-promise": {
"version": "1.3.0",
"from": "any-promise@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
},
"bytes": {
"version": "2.4.0",
"from": "bytes@2.4.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz"
},
"co": {
"version": "4.6.0",
"from": "co@>=4.4.0 <5.0.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
},
"co-body": {
"version": "4.2.0",
"from": "co-body@>=4.2.0 <5.0.0",
"resolved": "https://registry.npmjs.org/co-body/-/co-body-4.2.0.tgz"
},
"composition": {
"version": "2.3.0",
"from": "composition@>=2.1.1 <3.0.0",
"resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz"
},
"content-disposition": {
"version": "0.5.1",
"from": "content-disposition@>=0.5.0 <0.6.0",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz"
},
"content-type": {
"version": "1.0.2",
"from": "content-type@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz"
},
"cookies": {
"version": "0.6.1",
"from": "cookies@>=0.6.1 <0.7.0",
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.6.1.tgz"
},
"copy-to": {
"version": "2.0.1",
"from": "copy-to@>=2.0.1 <3.0.0",
"resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz"
},
"debug": {
"version": "2.2.0",
"from": "debug@*",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
},
"deep-equal": {
"version": "1.0.1",
"from": "deep-equal@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz"
},
"delegates": {
"version": "1.0.0",
"from": "delegates@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
},
"depd": {
"version": "1.1.0",
"from": "depd@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz"
},
"destroy": {
"version": "1.0.4",
"from": "destroy@>=1.0.3 <2.0.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
},
"ee-first": {
"version": "1.1.1",
"from": "ee-first@1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
},
"error-inject": {
"version": "1.0.0",
"from": "error-inject@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz"
},
"escape-html": {
"version": "1.0.3",
"from": "escape-html@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
},
"fresh": {
"version": "0.3.0",
"from": "fresh@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz"
},
"http-assert": {
"version": "1.2.0",
"from": "http-assert@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.2.0.tgz",
"dependencies": {
"http-errors": {
"version": "1.4.0",
"from": "http-errors@>=1.4.0 <1.5.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz"
}
}
},
"http-errors": {
"version": "1.5.0",
"from": "http-errors@>=1.2.8 <2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz"
},
"iconv-lite": {
"version": "0.4.13",
"from": "iconv-lite@0.4.13",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz"
},
"inflation": {
"version": "2.0.0",
"from": "inflation@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"isarray": {
"version": "0.0.1",
"from": "isarray@0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
},
"keygrip": {
"version": "1.0.1",
"from": "keygrip@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.1.tgz"
},
"koa": {
"version": "1.2.4",
"from": "koa@latest",
"resolved": "https://registry.npmjs.org/koa/-/koa-1.2.4.tgz"
},
"koa-bodyparser": {
"version": "2.2.0",
"from": "koa-bodyparser@latest",
"resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-2.2.0.tgz"
},
"koa-compose": {
"version": "2.4.0",
"from": "koa-compose@>=2.3.0 <3.0.0",
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.4.0.tgz"
},
"koa-is-json": {
"version": "1.0.0",
"from": "koa-is-json@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz"
},
"koa-route": {
"version": "2.4.2",
"from": "koa-route@latest",
"resolved": "https://registry.npmjs.org/koa-route/-/koa-route-2.4.2.tgz"
},
"media-typer": {
"version": "0.3.0",
"from": "media-typer@0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
},
"methods": {
"version": "1.1.2",
"from": "methods@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
},
"mime-db": {
"version": "1.24.0",
"from": "mime-db@>=1.24.0 <1.25.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.24.0.tgz"
},
"mime-types": {
"version": "2.1.12",
"from": "mime-types@>=2.0.7 <3.0.0",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz"
},
"ms": {
"version": "0.7.1",
"from": "ms@0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
},
"negotiator": {
"version": "0.6.1",
"from": "negotiator@0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz"
},
"on-finished": {
"version": "2.3.0",
"from": "on-finished@>=2.1.0 <3.0.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
},
"only": {
"version": "0.0.2",
"from": "only@0.0.2",
"resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz"
},
"parseurl": {
"version": "1.3.1",
"from": "parseurl@>=1.3.0 <2.0.0",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz"
},
"path-to-regexp": {
"version": "1.6.0",
"from": "path-to-regexp@>=1.2.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.6.0.tgz"
},
"qs": {
"version": "4.0.0",
"from": "qs@>=4.0.0 <4.1.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz"
},
"raw-body": {
"version": "2.1.7",
"from": "raw-body@>=2.1.2 <2.2.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz"
},
"setprototypeof": {
"version": "1.0.1",
"from": "setprototypeof@1.0.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz"
},
"statuses": {
"version": "1.3.0",
"from": "statuses@>=1.2.0 <2.0.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz"
},
"type-is": {
"version": "1.6.13",
"from": "type-is@>=1.5.5 <2.0.0",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz"
},
"unpipe": {
"version": "1.0.0",
"from": "unpipe@1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
},
"vary": {
"version": "1.1.0",
"from": "vary@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz"
}
}
}
{
"name": "mycard-tarball",
"version": "0.0.1",
"name": "mycard-developer-console",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "tsc && concurrently \"node server.js\" \"lite-server\"",
"tsc": "tsc",
"lint": "tslint -e ./node_modules/** ./**/*.ts -t verbose"
},
"dependencies": {
"koa": "latest",
"koa-bodyparser": "latest",
"koa-route": "latest"
"@angular/common": "~2.4.0",
"@angular/compiler": "~2.4.0",
"@angular/core": "~2.4.0",
"@angular/forms": "~2.4.0",
"@angular/http": "~2.4.0",
"@angular/material": "^2.0.0-beta.1",
"@angular/platform-browser": "~2.4.0",
"@angular/platform-browser-dynamic": "~2.4.0",
"@angular/router": "~3.4.0",
"clone": "^2.1.0",
"core-js": "^2.4.1",
"hammerjs": "^2.0.8",
"koa": "^2.0.0",
"koa-bodyparser": "^3.2.0",
"koa-logger": "^2.0.0",
"koa-morgan": "^1.0.1",
"koa-router": "^7.0.1",
"mongodb": "^2.2.16",
"mongodb-migrate": "^2.0.1",
"mongorito": "^2.2.0",
"reflect-metadata": "^0.1.9",
"rxjs": "5.0.1",
"systemjs": "0.19.40",
"zone.js": "^0.7.4"
},
"devDependencies": {
"@types/clone": "^0.1.30",
"@types/hammerjs": "^2.0.34",
"@types/koa": "^2.0.37",
"@types/koa-bodyparser": "^3.0.22",
"@types/koa-logger": "^2.0.2",
"@types/koa-router": "^7.0.21",
"@types/mongodb": "^2.1.36",
"@types/node": "^6.0.55",
"concurrently": "^3.1.0",
"lite-server": "^2.2.2",
"tslint": "^3.15.1",
"typescript": "^2.1.4"
}
}
body {
padding: 50px;
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
}
a {
color: #00B7FF;
}
/**
* Created by weijian on 2016/12/28.
*/
import Router = require('koa-router');
import App from '../models/app';
import {NotFound} from '../koa/errors';
import {Model} from '../db/mongo';
const router = new Router();
router.get('/apps', async(ctx, next) => {
ctx.body = await App.find({});
});
router.get('/apps/:id', async(ctx, next) => {
let app = await App.findOne({id: ctx.params.id});
if (app) {
ctx.body = app;
} else {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
});
router.post('/apps/:id', async(ctx, next) => {
let app = new App(ctx.request.body);
ctx.body = await app.save();
});
router.patch('/apps/:id', async(ctx, next) => {
let app: App|null = await Model.findOne({id: ctx.params.id});
if (!app) {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
Object.assign(app, ctx.request.body);
await app.save();
});
router.delete('/apps/:id', async(ctx, next) => {
let result = await App.remove({id: ctx.params.id});
if (!result.deletedCount) {
throw new NotFound(`App ${ctx.params.id} Not Found`);
}
ctx.body = result;
});
export default router;
import Router = require('koa-router');
const router = new Router();
/* GET home page. */
router.get('/', (ctx, next) => {
ctx.body = 'Hello World';
});
export default router;
/**
* Created by weijian on 2016/12/29.
*/
import Router = require('koa-router');
import {NotFound} from '../koa/errors';
import {Package} from '../models/package';
const router = new Router();
router.get('/packages/:id', async(ctx, next) => {
let p: Package|null = await Package.findOne({id: ctx.params.id});
if (!p) {
throw new NotFound(`Package id ${ctx.params.id} not found`);
}
ctx.body = p;
});
router.post('/packages/:id', async(ctx, next) => {
let p = new Package(ctx.request.body);
console.log(p, p.version);
});
export default router;
import Router = require('koa-router');
const router = new Router();
/* GET home page. */
router.get('/users', (ctx, next) => {
ctx.body = 'Hello World';
});
router.post('/users/:id(\\d*)', async(ctx, next) => {
});
export default router;
const path = require('path');
const child_process = require('child_process');
const crypto = require('crypto');
const koa = require('koa');
const bodyParser = require('koa-bodyparser');
const route = require('koa-route');
const app = koa();
app.use(bodyParser());
let tasks = new Map();
app.use(route.post('/metalinks/:id', function *(id) {
let files = this.request.body.map(file=>path.normalize(file));
let task_id = crypto.createHash('sha256').update(id + files.sort().join(), 'utf8').digest('hex');
tasks.set(task_id, {app_id: id, files: files});
this.type = 'application/metalink4+xml';
this.body = `<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
<file name="${task_id}.tar.xz">
<url priority="1">http://thief.mycard.moe/update/tasks/${task_id}.tar.xz</url>
<url priority="1">http://thief.my-card.in/update/tasks/${task_id}.tar.xz</url>
</file>
</metalink>`
}));
app.use(route.get('/tasks/:id.tar.xz', function *(id) {
let task = tasks.get(id);
let tar = child_process.spawn('tar', ['-Jc', '-C', path.join('apps', task.app_id)].concat(task.files), {XZ_OPT: '-9e'});
this.body = tar.stdout;
}));
app.listen(3000);
\ No newline at end of file
import Koa = require('koa');
import logger = require('koa-logger');
import index from './routes/index';
import users from './routes/users';
import apps from './routes/apps';
import packages from './routes/packages';
import bodyParser = require('koa-bodyparser');
import Mongorito = require('mongorito');
const url = 'mongodb://127.0.0.1:27017/mycard';
const app = new Koa();
app.use(async(ctx, next) => {
try {
await next();
} catch (err) {
// will only respond with JSON
ctx.status = err.status || 500;
ctx.body = {
message: err.message
};
}
});
// 跨域
app.use(async(ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*');
if (ctx.method === 'OPTIONS') {
ctx.status = 204;
} else {
await next();
}
});
app.use(logger());
app.use(async(ctx, next) => {
const start = new Date();
await next();
const ms = Date.now() - start.getTime();
ctx.set('X-Response-Time', `${ms}ms`);
});
app.use(bodyParser());
app.use(index.routes());
app.use(users.routes());
app.use(apps.routes());
app.use(packages.routes());
Mongorito.connect(url).then(() => {
app.listen(80);
});
/**
* Created by weijian on 2016/12/30.
*/
/**
* System configuration for Angular samples
* Adjust as necessary for your application needs.
*/
(function (global) {
System.config({
paths: {
// paths serve as alias
'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
// our app is within the app folder
app: 'app',
// angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.min.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/material': 'npm:@angular/material/bundles/material.umd.js',
'hammerjs': 'npm:hammerjs/hammer.min.js',
// other libraries
'rxjs': 'npm:rxjs',
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
app: {
main: './main.js',
defaultExtension: 'js'
},
rxjs: {
defaultExtension: 'js'
}
}
});
})(this);
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"strictNullChecks": true,
"sourceMap": true,
"moduleResolution": "node",
"lib": [
"es2017",
"dom"
],
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true,
"skipLibCheck": true
}
}
\ No newline at end of file
{
"rules": {
"class-name": true,
"comment-format": [
true,
"check-space"
],
"curly": true,
"eofline": true,
"forin": true,
"indent": [
true,
"spaces"
],
"label-position": true,
"label-undefined": true,
"max-line-length": [
true,
140
],
"member-access": false,
"member-ordering": [
true,
"static-before-instance",
"variables-before-functions"
],
"no-arg": true,
"no-bitwise": true,
"no-console": [
true,
"debug",
"info",
"time",
"timeEnd",
"trace"
],
"no-construct": true,
"no-debugger": true,
"no-duplicate-key": true,
"no-duplicate-variable": true,
"no-empty": false,
"no-eval": true,
"no-inferrable-types": true,
"no-shadowed-variable": true,
"no-string-literal": false,
"no-switch-case-fall-through": true,
"no-trailing-whitespace": true,
"no-unused-expression": true,
"no-unused-variable": true,
"no-unreachable": true,
"no-use-before-declare": true,
"no-var-keyword": true,
"object-literal-sort-keys": false,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"quotemark": [
true,
"single"
],
"radix": true,
"semicolon": [
"always"
],
"triple-equals": [
true,
"allow-null-check"
],
"typedef-whitespace": [
true,
{
"call-signature": "nospace",
"index-signature": "nospace",
"parameter": "nospace",
"property-declaration": "nospace",
"variable-declaration": "nospace"
}
],
"variable-name": false,
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment