駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

ExpressでMongooseを使う part1

ExpressからMongooseのモデルのインスタンスを用いて、データベースに対してCRUD

操作を行います。

簡潔に表すとExpressの簡易的なWEBアプリを作成し、WEBページからMongoDBに対し

CRUD操作ができるものを作成します。

今回は簡単な農産物の商品管理アプリを作っていきます。

早速、index.jsファイルから作成します。

・index.js

const express = require('express');
const app = express();
const path = require('path');
const mongoose = require('mongoose');
const Product = require('./models/product');
mongoose.connect('mongodb://localhost:27017/farmStand',
{ useNewUrlParser: true, useUnifiedTopology: true })
.then*1;
app.set('view engine', 'ejs');
 
app.listen(3000, () => {
console.log('ポート3000で待機');
})

下準備はできたので、モデル作成をします。

モデルの量は記述量次第では増えていきますし、一つ作成してしまえば使い回すことも

可能なのでまずモデルのファイルから作成します。下記のような感じでOK!

モデルのproduct.jsファイルを作成

const mongoose = require('mongoose');
const { Schema } = mongoose;
//スキーマ作成
const productSchema = new Schema({
name: {
type: String,
require: true
},
price: {
type: Number,
require: true,
min: 0
},
category: {
type: String,
enum: ['果物', '野菜', '乳製品']
}
});
//モデル作成
const Product = mongoose.model('Product', productSchema);
//違うファイルからproductSchemaを再利用できるようにしておく
module.exports = Product;

index.jsで「const Product = require('./models/product');」を記述し、

product.jsを使えるようにrequireしておきます。

そして予めテストデータを用意しておいたので、値を挿入しておきます。

このようにデータが入っているのが確認取れます。

 

参考までに!!!〜テストデータの作り方〜

seed.jsファイル(スクリプトを記述して実行するテストデータを入れておくファイル)

を用意します。初期に投入するデータのことをseedと呼ぶのでそのままのファイル名になっています。

※サンプルseed.jsファイル※

const mongoose = require('mongoose');
const Product = require('./models/product');
mongoose.connect('mongodb://localhost:27017/farmStand',
{ useNewUrlParser: true, useUnifiedTopology: true })
.then(() => {
console.log('MongoDBコネクションOK!!');
})
.catch(err => {
console.log('MongoDBコネクションエラー!!!');
console.log(err);
});
const seedProducts = [
{
name: 'ナス',
price: 98,
category: '野菜'
},
{
name: 'カットメロン',
price: 480,
category: '果物'
},
{
name: '種無しスイカのカット',
price: 380,
category: '果物'
},
{
name: 'オーガニックセロリ',
price: 198,
category: '野菜'
},
{
name: 'コーヒー牛乳',
price: 298,
category: '乳製品'
},
];
Product.insertMany(seedProducts)
.then(res => {
console.log(res);
}).catch(e => {
console.log(e);
})

ここまで記述が完了したら、ターミナルで「node seed.js」を実行すればデータが挿入

されると思います。

*1:) => {

console.log('MongoDBコネクションOK!!');
})
.catch(err => {
console.log('MongoDBコネクションエラー!!!');
console.log(err);
});
//viewディレクトリのパスをセット
//ejsというテンプレートエンジンを使えるように設定,これを使うとhtmlのなかで変数やfor文を使えるようになる
app.set('views', path.join(__dirname, 'views'