Magren

Magren

Idealist & Garbage maker 🛸
twitter
jike

node.js+expressのAPIを作成する

前一段時間、node.js で mongoDB データベースを操作する方法を学びました。今回は、API の作成についての記録を追加します。

データベースへのリンク#

プロジェクトのルートディレクトリで 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(
     'MongoDBの接続エラー: ' + error
    );
    mongoose.disconnect();
});

db.on('close', function() {
    console.log(
        'データベースが切断されました。再接続します。'
    );
});

export default db;

データモデルの作成(テーブルの作成)#

test データベースに、StudentSchemaという名前のテーブルを作成します。テーブルには name と age のフィールドがあり、公開されています。

import mongoose from 'mongoose';

//スキーマの作成
const StudentSchema = new mongoose.Schema({
    name: String,
    age: Number
})

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

export default studentSchema;

API ルートの構築#

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に設定し、以下はデータを更新する API の例です:
postman_updata.png

GET テスト:#

以下は ID に基づいてデータを取得する例です。
postman_get.png

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。