如何使用类型为script mongoose的模型接口创建模式

时间:2017-03-30 08:06:01

标签: node.js mongodb typescript

在我的项目中使用的技术有Nodejs,Mongoose,Express,Type script

我想在Mongodb中创建下面提到的JSON格式集合

{
  "emp_id": "001",
  "login_id": "venue@abc.com",
  "password": "venue123",
  "role_id": 6,
  "role_name": "TechLead",
  "emp_ext": 456;
  "leave_details": {
   "leave_transactions": [
      {
        "leave_from_date": "14-10-2016",
        "leave_from_part": "noon",
        "leave_to_date": "16-10-2016",
        "leave_to_part": "full",
        "total_no_of_days": 2.5,
        "leave_approved_by_id": "87",
        "leave_approved_date": "14-10-2016",
        "leave_applied_on": "13-10-2016",
        "leave_status": "approved",
        "leave_type": "EL",
        "leave_desc": "going to hometown"
      },
      {
        "leave_from_date": "18-11-2016",
        "leave_from_part": "full",
        "leave_to_date": "19-11-2016",
        "leave_to_part": "full",
        "total_no_of_days": 2,
        "leave_approved_by_id": "115",
        "leave_approved_date": "17-11-2016",
        "leave_applied_on": "17-11-2016",
        "leave_status": "approved",
        "leave_type": "CL",
        "leave_desc": "not feeling well",
        "rejected_reason":""
      }
      ]
  }
}

创建在模型接口和类下面创建的上述结构

import mongoose = require("mongoose");
import IJoiningDetailsModel = require('./JoiningDetailsModel');
import ILeaveDetailsModel = require('./LeaveDetailsModel');

interface EmployeeMasterModel extends mongoose.Document {
    emp_id: number;
    login_id: string;
    name: string;
    password: string;
    role_id: number;
    role_name: string;
    emp_ext: number;
    leave_details: ILeaveDetailsModel;
}

export = EmployeeMasterModel;


import IEmployeeMasterModel = require('./interfaces/EmployeeMasterModel');
import JoiningDetailsModel = require('./JoiningDetailsModel');
import IJoiningDetailsModel = require('./interfaces/JoiningDetailsModel');
import ILeaveDetailsModel = require('./interfaces/LeaveDetailsModel');

class EmployeeMasterModel {

    private employeeModel: IEmployeeMasterModel;

    constructor(employeeModel: IEmployeeMasterModel) {
        this.employeeModel = employeeModel;
    }
    get name (): string {
        return this.employeeModel.name;
    }

    get email (): string {
        return this.employeeModel.login_id;
    }

    get password (): string {
        return this.employeeModel.password;
    }

     get leave_details (): ILeaveDetailsModel {
        return this.employeeModel.leave_details;
    }

}
Object.seal(EmployeeMasterModel);
export =  EmployeeMasterModel;


import mongoose = require("mongoose");

import mongoose = require("mongoose");
import ILeaveTransactionModel = require('./LeaveTransactionModel');
interface LeaveDetailsModel extends mongoose.Document {

    leaveTransactionModel: ILeaveTransactionModel;
}

export = LeaveDetailsModel;

import ILeaveDetailsModel = require('./interfaces/LeaveDetailsModel');
import ILeaveTransactionModel = require('./interfaces/LeaveTransactionModel');

class LeaveDetailsModel {

    private leaveDetailsModel: ILeaveDetailsModel;

    constructor(leaveDetailsModel: ILeaveDetailsModel) {
        this.leaveDetailsModel = leaveDetailsModel;
    }
      get leaveTransactionModel (): ILeaveTransactionModel {
        return this.leaveDetailsModel.leaveTransactionModel;
    }

}
Object.seal(LeaveDetailsModel);
export =  LeaveDetailsModel;


import mongoose = require("mongoose");

interface LeaveTransactionModel extends mongoose.Document {
    leave_from_date:Date;
    leave_from_part : string;
    leave_to_date : Date;
    leave_to_part :string;
    total_no_of_days :number;
    leave_type :string;
    leave_desc:string;
    rejected_reason:string;
    leave_approved_by_id:number;
    leave_approved_date:Date;
    leave_applied_on:Date;
    leave_status:string;
}

export = LeaveTransactionModel;



import ILeaveTransactionModel = require('./interfaces/LeaveTransactionModel');

class LeaveTransactionModel {

    private leaveTransactionModel: ILeaveTransactionModel;

    constructor(leaveTransactionModel: ILeaveTransactionModel) {
        this.leaveTransactionModel = leaveTransactionModel;
    }
    get leave_from_date (): Date {
        return this.leaveTransactionModel.leave_from_date;
    }

    set leave_from_date(leave_from_date : Date){
      this.leaveTransactionModel.leave_from_date = leave_from_date;
    }
    get leave_from_part (): string {
        return this.leaveTransactionModel.leave_from_part;
    }

    get leave_to_date (): Date {
        return this.leaveTransactionModel.leave_to_date;
    }

    get leave_to_part (): string {
        return this.leaveTransactionModel.leave_to_part;
    }

    get total_no_of_days () : number{
        return this.leaveTransactionModel.total_no_of_days;
    }
    get leave_type (): string {
        return this.leaveTransactionModel.leave_type;
    }
      get leave_desc (): string {
        return this.leaveTransactionModel.leave_desc;
    }
  get rejected_reason (): string {
        return this.leaveTransactionModel.rejected_reason;
    }

  get leave_status (): string {
        return this.leaveTransactionModel.leave_status;
    }

     get leave_approved_by_id () : number{
        return this.leaveTransactionModel.leave_approved_by_id;
    }
     get leave_approved_date (): Date {
        return this.leaveTransactionModel.leave_approved_date;
    }
    get leave_applied_on (): Date {
        return this.leaveTransactionModel.leave_applied_on;
    }

}
Object.seal(LeaveTransactionModel);
export =  LeaveTransactionModel;

架构类

import DataAccess = require('../DataAccess');
import IEmployeeMasterModel = require("./../../model/interfaces/EmployeeMasterModel");

var mongoose = DataAccess.mongooseInstance;
var mongooseConnection = DataAccess.mongooseConnection;

class EmployeeMasterSchema {

    static get schema () {
    // Employee leave transactions(request/approve/cancel) schema declaration
        var LeaveTransactionsSchema = mongoose.Schema({
            leave_from_date: {
                type: Date,
                required: false
            },
            leave_from_part: {
                type: String
            },
            leave_to_date: {
                type: Date,
                required: false
            },
            leave_to_part: {
                type: String
            },
            total_no_of_days: {
                type: String,
                required: false
            },
            leave_type: {
                type: String,
                required: false
            },
            leave_desc: {
                type: String,
                required: false
            },
            rejected_reason: {
                type: String
            },
            leave_approved_by_id: {
                type: Number,
                required: false
            },
            leave_approved_date: {
                type: Date
            },
            leave_applied_on: {
                type:Date,
                required: false
            },
            leave_status: {
                type: String,
                required: false
            }
        });

        // Employee leave details schema declaration
        var LeaveDetailsSchema = mongoose.Schema({
            leave_transactions: {
                type: [ LeaveTransactionsSchema ]
            }
        });

        // Employee master schema declaration
        var schema =  mongoose.Schema({
            emp_id : {
                type: Number,
                required: false
            },
            login_id: {
                type: String,
                required: false
            },
            password: {
                type: String,
                required: false
            },
            role_id: {
                type: Number
            },
            role_name: {
                type: String
            },
            emp_ext: {
                type: Number
            },
                        leave_details: {
                type: [ LeaveDetailsSchema ]
            }
        });

        return schema;
    }
}

var schema = mongooseConnection.model<IEmployeeMasterModel>("employee", EmployeeMasterSchema.schema);
export = schema;

当我得到请求时,方法被调用,用于测试目的设置数据到ILeaveTransactionModel但是当我尝试将ILeaveTransactionModel设置为不工作时...如何将ILeaveTransactionModel设置为ILeaveDetailsModel.thanks提前

import express = require("express");
import LeaveTraBusiness = require("./../app/business/LeaveTraBusiness");
import IBaseController = require("./BaseController");
import LeaveTransactionModel = require("./../app/model/LeaveTransactionModel");
import ILeaveDetailsModel = require("./../app/model/interfaces/LeaveDetailsModel");
import ILeaveTransactionModel = require("./../app/model/interfaces/LeaveTransactionModel");

// tslint:disable-next-line:one-line
export class LeaveTraController implements IBaseController<LeaveTraBusiness>{
  leaveTra :any;
create(req: express.Request, res: express.Response): void {

 try {
            console.log(req.body.leave_desc);
          this.leaveTra = <ILeaveTransactionModel>{
                leave_from_date:new Date(),
                leave_from_part : "Full",
                leave_to_date : new Date(),
                leave_to_part :"half",
                 total_no_of_days :5,
                leave_type :"SL",
                leave_desc:"No comme",
                rejected_reason:"No comme",
                leave_approved_by_id:121,
                leave_approved_date:new Date(),
                leave_applied_on:new Date(),
                leave_status:"Active"
           };

            console.log(JSON.stringify(this.leaveTra));
            let leaveTraBusiness = new LeaveTraBusiness();
          //Here i want to set leaveTra to ILeaveDetailsModel
            let leaveDetailsModel : <ILeaveDetailsModel>{leaveTra};
            leaveTraBusiness.create(leaveDetailsModel, (error, result) => {
                if (error)
                   res.send({"error": "error"});
                else
                   res.send(result);
            });
        }
        catch (e)  {
            console.log(e);
            res.send({"error": "error in your request"});

        }
    }


}

1 个答案:

答案 0 :(得分:0)

抱歉,我确实错误地设置了#34; leaveTra&#34;来,代码解决了我的问题

让leaveDetailsModel = {                 leaveTransactionModel:leaveTra             };