node+ts+express 構建 RESTful API 之 連接數據庫

使用TypeScript+Express+NodeJS+MongoDB 開發 Web APIs,如有錯誤可以擊提issue 💪,如果覺得ok,請點個star 🙏, 送人玫瑰、手有餘香
倉庫地址 ➡️FE_note

本系列文章

  1. 搭建環境
  2. 構建路由
  3. 連接數據庫
  4. nodeJs 錯誤處理
  5. 權限認證與數據加密

引入MongoDB

MongoDB安裝與入門

目錄結構

├── README.md
├── package-lock.json
├── package.json
├── src
│   ├── config
│   │  └── index.ts
│   ├── controllers
│   │  └── userControllers.ts
│   ├── models
│   │  └── user.model.ts
│   ├── routes
│   │   ├── index.ts
│   │   └── user.ts
│   └── server.ts
│   ├── app.ts
└── tsconfig.json

引入Mongoose ➡️ app.ts

class App{

constructor(){
   //... 省略其它
    this.setMongoConfig()
}
// ...

private setMongoConfig(){
    mongoose.Promise = global.Promise;
    mongoose.connect(DB_URL, {
        useNewUrlParser: true
        });
    }
}

配置文件 ➡️ config/index.ts

export const DB_URL='mongodb://localhost:27017/express-api';
export const PORT=3000;

添加Models ➡️ user.model.ts

import * as mongoose from 'mongoose'

const Schema=mongoose.Schema;

const userSchema = new Schema({
    firstName: {
        type: String,
        required: 'Enter a first name'
    },
    lastName: {
        type: String,
        required: 'Enter a last name'
    },
    email: {
        type: String
    },
    status:{
        type:String,
        required:true,
        enum:['active','complete','pastdue'],
        default:'active'
    },
    company: {
        type: String
    },
    phone: {
        type: Number
    },
    created_date: {
        type: Date,
        default: Date.now
    }
});

const User=mongoose.model('user',userSchema)

export default User

處理業務邏輯(Controllers) ➡️ controllers/userController.ts

  • 增加©: model.create()、new model()
  • 查詢®: model.find()、model.findOne()、model.findById()
  • 修改(U):model.update()、model.findByIdAndUpdate()、model.findOneUpdate()
  • 刪除(D):model.remove()、model.findByIdAndRemove()、model.findOneRemove()
import { Request, Response } from "express";
import User from '../models/user.model'

class UserController{
    static listAll=async (req:Request,res:Response)=>{
        console.log('list ALl');
        User.find({},(err,allInfo)=>{
            if(err){
                res.send(err)
            }
                res.send(allInfo)
        })
    }
    static getOneById=async(req:Request,res:Response)=>{
        console.log('get one by id');
        User.findById(req.params.id,(err,userInfo)=>{
            if(err){
                res.send(err)
            }
            res.send(userInfo)
        })
    }
    static newUser=async (req:Request,res:Response)=>{
        console.log('create user');
        let newUser=new User(req.body);
        newUser.save((err,info)=>{
            if(err){
                res.send(err)
            }
            res.send(info)
        })

    }
   static editUser=async (req:Request,res:Response)=>{
        console.log('edit user');
        User.findOneAndUpdate({_id:req.params.id},req.body,(err,info)=>{
            if(err){
                res.send(err)
            }
            res.send(info)
        })

    }
    static delUser=async (req:Request,res:Response)=>{
        console.log('del user');
        User.remove({_id:req.params.id},(err)=>{
            if(err){
                res.send(err)
            }
            res.send({message:'Successfully deleted user!'})
        })
    }
}
export default UserController

👇錯誤處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章