前一段時間、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 の例です:
GET テスト:#
以下は ID に基づいてデータを取得する例です。