Magren

Magren

Idealist & Garbage maker 🛸
twitter
jike

node.js+express寫接口

前一段時間學習了 node.js 操作 mongoDB 數據庫,現在追加一篇寫接口的記錄。

連結數據庫#

在項目根目錄下安裝 Mongoose

npm install mongoose --save

利用 mongoose 來連結 MongoDB 在項目中創建db.js文件:

'use strict';

import mongoose from 'mongoose';


mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true,  useUnifiedTopology: true });

const db = mongoose.connection;

db.once('open' ,() => {
  console.log(
    '連接數據庫成功'
  );
})

db.on('error', function(error) {
    console.error(
     'Error in MongoDb connection: ' + error
    );
    mongoose.disconnect();
});

db.on('close', function() {
    console.log(
        '數據庫斷開,重新連接數據庫'
    );
});

export default db;

創建數據模型(建一張表)#

在 test 數據庫中創建一張名為StudentSchema的表,表中有 name 和 age 字段,並且公出。

import mongoose from 'mongoose';

//創建schema
const StudentSchema = new mongoose.Schema({
    name: String,
    age: Number
})

const studentSchema = mongoose.model("StudentSchema",StudentSchema);

export default studentSchema;

接口路由搭建#

添加 body-parser 依賴:

npm install body-parser

在 app.js 中引入:

import bodyParser from 'body-parser';

//使用body-parser中間件
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());

新建一個 js 文件,用於寫數據接口 req.body 指的是 URL 中的參數,req.params 指的是路徑

import express from 'express';
import studentInfo from './studentInfo';

const router = express.Router();

router.get("/test",(req,res)=>{
    res.json({msg:"接收成功"});
    //示例:http://localhost:3000/test
})

//添加一條數據
router.post('/add',(req,res) => {
    const Student = {};
    if(req.body.name){
        Student.name = req.body.name;
    }
    if(req.body.age){
        Student.age = req.body.age;
    }
    new studentInfo(Student).save().then(user => {
    res.json(user);
  });
})

//根據id刪除一條數據
router.post('/delete',(req,res) => {
    studentInfo.remove({_id:req.body.id}).then((result)=>{
        res.json(result)
    })
})

//獲取一條數據
router.get('/:id',(req,res) => {
    studentInfo.findOne({_id:req.params.id}).then(user => {
        if(!user) {
            return res.status(400).json("沒有任何數據存在")
        }
        return res.json(user)
    }).catch(err => {
        return res.status(404).json(err)
    })
})

//更新一條數據
router.post('/:id',(req,res) => {
    const Student = {};
    if(req.body.name){
        Student.name = req.body.name;
    }
    if(req.body.age){
        Student.age = req.body.age;
    }
    studentInfo.updateOne({ _id: req.params.id }, { $set: Student }).then(user => {
      if (!user) {
        return res.status(400).json("數據不存在");
      }
     res.json(user);
    })
    .catch(err => {
      return res.status(404).json(err);
    });
})

module.exports = router;

使用#

在 app.js 中引入:

import test from './test';

app.use(test);

利用 Postman 測試#

POST 測試:#

將 POST 的 body 設置成x-www-form-urlencoded,下圖為更新數據的接口示例:
postman_updata.png

GET 測試:#

下圖為根據 ID 獲取一條數據的示例
postman_get.png

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。