1. 程式人生 > 程式設計 >用Node.js+express+cloud MongoDB Atlas建立API介面

用Node.js+express+cloud MongoDB Atlas建立API介面

介紹

  • 本文用 node.js express框架連線 cloud MongoDB Atlas 搭建API介面
  • 本文側重於cloud MongoDB Atlas

建立專案

  • 建立一個資料夾 用VScode編譯器開啟
  • 選擇資料夾在終端開啟

在終端中輸入 npm init 然後一直回車 最後確認

node.js 安裝 express 輸入npm install express nodemon回車

  • 完成後開啟 package.json 檢查是否安裝成功 安裝成功如下圖:

  • 安裝成功後 修改 scripts 修改為 "start": "nodemon app.js"

建立API埠

在當前目錄下 建立 app.js 檔案

const express = require("express")
const app = express()

app.get('/',(req,res) => {
  res.send("Hello World")
})

//埠
app.listen(3000)
複製程式碼

儲存 在終端中 輸入 npm start 開啟瀏覽器 開啟 https://localhost:3000

埠建立完成

  • node.js安裝 mongoDB 在終端中ctrl+c 終止批處理操作 再輸入 npm install mongoose 回車安裝

註冊與建立cloud MongoDB Atlas

點我進MongoDB官網

  • 點選右上角 TryFree 註冊一個新使用者可以獲得500m的免費雲資料
  • 正常填寫郵箱密碼註冊完成進入主頁
  • 選擇 FREE 點選 Create a Starter Cluster
  • 隨便選擇一個亞洲節點 我這裡是選擇taiwan的
  • 給你專案起個名稱

  • 完成後點選下方的Create Cluster建立

  • 頁面會自動跳轉 然後等待7-10分鐘 等專案初始化完成
  • 完成之後顯示如下介面

  • 點選右側欄Network Access給專案 再點選 +ADD IP ADDRESS新增接入IP
  • 我這邊選擇所有IP都可以接入 ALLOW ACCESS FROM ANYWHERE
    再確認Confirm

  • 需要在註冊郵箱確認 所有IP都可以接入 點選郵箱的連線即可確認

  • 確認完成狀態:

  • 點選右側欄Database Access 再點選 +ADD NEW USER新增接入使用者
  • 填寫使用者名稱 密碼 和選擇許可權後新增

  • 點選右側欄Clusters 再點選 COLLECTIONS

  • 選擇新增我的資料庫 填寫好後建立 建立成功
    點選 右側欄Clusters 返回主頁 點選 CONNECT 連線資料
    點選 Copy

  • 修改為user123的密碼 admin修改為建立的資料庫名
  • 例:
mongodb+srv://user123:[email protected]/userDB?retryWrites=true&w=majority
複製程式碼
  • node.js 安裝 doenv 輸入 npm install doenv 回車安裝
  • 安裝完成後 在根目錄新增檔案.env在檔案中寫入連線資料庫的url
DB_CONNECTION=mongodb+srv://user123:[email protected]/userDB?retryWrites=true&w=majority
複製程式碼
  • 連線資料庫 在app.js中寫入
const mongoose = require("mongoose")
require("dotenv/config")

mongoose.connect(process.env.DB_CONNECTION,{ useUnifiedTopology: true,useNewUrlParser: true },() => {
  console.log("connect DB!")
})

複製程式碼

資料庫的增刪改查操作

  • 在根目錄下建立routes資料夾 在檔案加下建立posts.js檔案來統一處理資料庫增刪改查程式碼的編寫
  • 在根目錄下建立models資料夾 在檔案加下建立Post.js檔案來處理資料庫鍵名新增

  • posts.js檔案中 引入 models檔案下的Post.js
const Post = require('../models/Post')
複製程式碼
  • Post.js中寫入 資料庫測試的鍵名
const mongoose = require('mongoose')
const PostSchema = mongoose.Schema({
    title:{
        type:String,required:true
    },connect:{
        type:String,date:{
        type:Date,dafault: Date.now
    }
})
module.exports = mongoose.model('Posts',PostSchema)
複製程式碼
  • app.js檔案中 引入 routes檔案下的posts.js
const postRoute = require('./routes/posts')
app.use('/posts',postRoute)
複製程式碼

-在posts.js檔案下寫入增刪改查程式碼

const express = require("express")
const router = express.Router()
const Post = require('../models/Post')

//查詢資料庫所有資料
router.get('/',async (req,res) => {
    try {
        const finePosts = await Post.find()
        res.json(finePosts)
    } catch (err) {
        res.json({ message: err })
    }
})
//新增資料
router.post('/',res) => {
    const post = new Post({
        title: req.body.title,connect: req.body.connect
    })
    try {
        const savePost = await post.save()
        res.json(savePost)
    } catch (err) {
        res.json({ message: err })
    }
})
//查詢對應id的資料
router.get('/:postId',res) => {
    try {
        const findPost = await Post.findById(req.params.postId)
        res.json(findPost)
    } catch (err) {
        res.json({ message: err })
    }
})
//刪除資料
router.delete('/:postId',res) => {
    try {
        const removePost = await Post.remove({ _id: req.params.postId })
        res.json(removePost)
    } catch (err) {
        res.json({ message: err })
    }
})
//修改資料
router.patch('/:postId',res) => {
    try {
        const updatePost = await Post.updateOne({ _id: req.params.postId },{ $set: { title: req.body.title } })
        res.json(updatePost)
    } catch (err) {
        res.json({ message: err })
    }
})

module.exports = router
複製程式碼
  • 注意:若需要在服務端上正常執行還需要安裝以下依賴
  • node.js 安裝 doenv 輸入 npm install body-parser 回車安裝
  • node.js 安裝 doenv 輸入 npm install cors 回車安裝
  • app.js引入body-parsercors
const bodyParser = require('body-parser')
const cors = require('cors')
app.use(cors())
app.use(bodyParser.json())
複製程式碼

測試

  • 在終端中npm start啟動API
  • API測試軟體 postman
  • 插入資料:

  • 查詢所有資料:
  • 查詢id為5d9caaeec6c67361e0ac3f1a的資料:
  • 更改id為5d9caaeec6c67361e0ac3f1a的資料:
  • 刪除id為5d9caaeec6c67361e0ac3f1a的資料:
    -瀏覽器訪問資料:

  • 控制檯:

專案原始碼

點我檢視原始碼

未經作者允許禁止轉載!