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');
{ useNewUrlParser: true, useUnifiedTopology: true })
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,
}
});
//モデル作成
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');
{ 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: '果物'
},
{
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'