import { Inject } from '@neoskop/injector';
import {
ContentType, Controller, JsonController, Get, View, Locals, Json, Raw, Text,
OnUndefined
} from '../src/metadata/controller';
import { Param, QueryParam } from '../src/metadata/params';
import 'zone.js';
import { NemModule } from '../src/metadata/module';
import { nem } from '../src/bootstrap';
import { VIEWS } from '../src/tokens';
import { Result } from '../src/metadata/result';
@Controller({
providers: [
{ provide: 'FOO', useValue: 'BAR' }
]
})
export class SimpleController {
constructor(@Inject('FOO') protected foo : string) {
console.log({ foo });
}
@Get('/')
@ContentType('text/plain')
@Json()
index(@QueryParam('word') word : string = 'World') {
console.log({ word });
return 'Hello ' + word
}
@Get('/echo/:text')
@ContentType('text/plain')
@Raw()
echo(@Param('text') text : string) {
return Result([ new ContentType('text/plain') ], text);
}
@Get('/test')
test() {
return Result([
new ContentType('text/html'),
new Locals({
foobar: 'baz'
}),
new View('foobar')
], {
foo: 'bar'
})
}
@Get('/test2')
@Text()
test2() {
return 2;
}
@Get('/html')
@ContentType('text/html')
html() {
return `
HTML
`
}
}
@JsonController()
export class JsonControllerImpl {
protected entities = [
{ id: 'foo', name: 'bar' },
{ id: 'foobar', name: 'baz' }
];
@Get('/')
index() {
return this.entities;
}
@Get('/:id')
@OnUndefined(404)
entity(@Param('id') id : string) {
return this.entities.find(e => e.id === id);
}
}
@NemModule({
controller: [
[ '/', SimpleController ]
]
})
export class SubModule {
constructor() {
console.log(this.constructor.name, 'constructor');
}
}
@NemModule({
modules: [
[ '/sub', SubModule ]
],
controller: [
[ '/', SimpleController ],
[ '/simple', SimpleController ],
[ '/json', JsonControllerImpl ]
]
})
export class SimpleModule {
constructor() {
console.log(this.constructor.name, 'constructor');
}
}
// const app = express();
// const injector = InjectorFactory.create({
// providers: [
// ParamFactory,
// ModuleRouterFactory,
// { provide: NemRootZone, useValue: Zone.root }
// ]
// });
//
// const factory = injector.get(ModuleRouterFactory);
//
// const router = factory.createRouterFromModule(SimpleModule);
//
// // const factory = injector.get(ControllerRouterFactory);
// //
// // const simpleRouter = factory.createRouterFromController(SimpleController);
//
// app.use(router);
const app = nem({
providers: [
{ provide: VIEWS, useValue: `${__dirname}/../views`, multi: true }
]
}).bootstrap(SimpleModule);
// app.use(simpleRouter);
// app.use('/simple', simpleRouter);
// app.get('/', (req : express.Request, res : express.Response) => {
// console.log({ req, res }, (req as any).res === res);
// res.end('Hello World')
// });
app.listen(8000, () => {
console.log('Started');
});