Skip to content

Latest commit

 

History

History
75 lines (66 loc) · 2.03 KB

README.md

File metadata and controls

75 lines (66 loc) · 2.03 KB

oak-injector

dependency injector support for deno oak framework.

usage

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

file upload

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;

Contribution

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.