채용 공고 웹사이트: 지원 세션




GitHub: https://github.com/Sokhavuth/opine-job
Deno 배포: https://khmerweb-job.deno.dev

Redis 데이터베이스에 유용한 세션 데이터를 저장하기 위해 deps.ts 모듈의 패키지 목록에 이 링크를 추가하여 "Deno Sessions"https://deno.land/x/[email protected]라는 타사 패키지를 사용할 수 있습니다.



// deps.ts

export {
    dirname,
    fromFileUrl,
    join,
} from "https://deno.land/[email protected]/path/mod.ts";
export {
    json,
    opine,
    Router,
    serveStatic,
    urlencoded,
} from "https://deno.land/x/[email protected]/mod.ts";

export { config } from "https://deno.land/[email protected]/dotenv/mod.ts";
export { Bson, MongoClient } from "https://deno.land/x/[email protected]/mod.ts";
export { connect } from 'https://deno.land/x/[email protected]/mod.ts';
export { OpineSession, RedisStore } from "https://deno.land/x/[email protected]/mod.ts";



그러나 이 패키지는 아직 Redis Enterprise 플랫폼에서 Redis 데이터베이스를 지원하지 않으며 독립 실행형 Redis 오픈 소스만 지원합니다. 이 패키지를 사용하려면 보기에서 RedisStore 클래스를 서브클래싱하여 init() 메서드를 재정의하여 약간 수정해야 합니다.



// setting.js

function setting(){
    const configure = {
        site_title: "Ever Job",
        page_title: "Home",
        message: "",
        dasPostAmount: 10,
        homePostAmount: 12,
    }

    return configure;
}


import { config } from "./deps.ts";
await config({export: true});


import { MongoClient } from "./deps.ts";
const client = await new MongoClient();
await client.connect(Deno.env.get('DATABASE_URI'));
const mydb = client.database(Deno.env.get('DB_NAME'));


import { connect } from "./deps.ts";
const myredis = await connect({
    hostname: Deno.env.get('REDIS_URI'),
    port: parseInt(Deno.env.get('REDIS_PORT')),
    password: Deno.env.get('REDIS_PASSWORD'),
});


import { OpineSession, RedisStore } from "./deps.ts";
class _RedisStore extends RedisStore{
    async init(){
        this.db = await myredis;
    }
};
const session_store = new _RedisStore({});
await session_store.init();


export { setting, mydb, session_store, OpineSession }; 



세션을 생성하고 나중에 다른 모듈에서 사용할 요청 객체에 저장하려면 다음과 같이 해야 합니다.



// app.ts

import {
    dirname,
    fromFileUrl,
    join,
    json,
    opine,
    serveStatic,
    urlencoded,
} from "./deps.ts";

import indexRouter from "./routes/index.ts";
import usersRouter from "./routes/users.ts";

const app = opine();

import { 
    setting, 
    mydb, 
    session_store, 
    OpineSession, 
} from "./setting.js";

const session = new OpineSession(app, {}, session_store);

app.use(async (req, res, next) => {
    req.mydb = await mydb;
    req.mysetting = await setting;
    req.mysession = session;
    next();
});

const __dirname = fromFileUrl(dirname(import.meta.url));

// Handle different incoming body types
app.use(json());
app.use(urlencoded());

// Serve our static assets
app.use(serveStatic(join(__dirname, "public")));

// Mount our routers
app.use("/", indexRouter);
app.use("/users", usersRouter);  

export default app;

좋은 웹페이지 즐겨찾기