dependency injector support for deno oak framework.
import { Application } from "https://deno.land/x/oak/mod.ts";
import { GeneratorFromClasses, Restful, List, Query, Default, Controller } from "https://deno.land/x/oak_injector/mod.ts";
const app = new Application();
// ...
@Restful("/test")
class TestController extends Controller {
@List()
List(@Query("page") @Default("10") page: number) {
// ...
return page;
// ...
}
}
// ...
app.use(GeneratorFromClasses([TestController]).routes());
await app.listen({ port: 80 });
then access
http://127.0.0.1/test?page=20
import {
Controller,
Create,
File,
Form,
Restful,
} from "https://raw.githubusercontent.com/narrowizard/oak-injector/master/mod.ts";
import { FormDataFile } from "https://deno.land/x/[email protected]/multipart.ts";
import logger from "../../../middlewares/logger.ts";
import { format } from "https://deno.land/[email protected]/datetime/mod.ts";
import { exists } from "https://deno.land/[email protected]/fs/exists.ts";
@Restful("/files")
class Files extends Controller {
@Create()
async Post(@File("file") file: FormDataFile, @Form("type") type: string) {
const now = new Date();
const pathname = `upload/${type}/${format(
now,
"yyyyMMdd"
)}`;
const filename = `${pathname}/${format(now, "hhmmss")}${Math.round(Math.random() * 1000)}-${file.originalName}`;
if (file.content) {
// file content kept in memory
await Deno.writeFile(filename, file.content);
} else if (file.filename) {
// file content written to file
const exist = await exists(pathname);
if (!exist) {
await Deno.mkdir(pathname, { recursive: true });
}
await Deno.copyFile(file.filename, filename);
} else {
return "";
}
return filename;
}
}
export default Files;
This repo is working in progress now, APIs will be incompatible in the future.
Feel free to submit an issue if you have any problems or suggestions when using oak-injector.