atoris1192
atoris1192.qrunch.io

express-generator編-nodejsからmongodbの操作を少しづつ改良してみる

2018/12/04に投稿
  • 前記事: Express編-nodejsからmongodbの操作を少しづつ改良してみる

  • 前記事では、URLで検索条件を入力すれば、検索出来るようにまで出来たのですが、使い勝手がいいとは言えません。

  • 自分ひとりで使う分にこれでも構わないのですが、他の人に使ってもらうためには、見た目を気にしないと行けなくなってきます。
  • HTML と CSS を作っていくわけですが、素のHtmlタグ等は、書くのが正直苦痛レベルなので ここでは、 Pug と Sass を利用したいと思います。
  • とりあえず、UPしてあるコードに差し替えてもらえれば、動くはずです。

  • 環境を作っていきます、今回の目標は前回と同じ事が出来るところまでです。

  • ExpressGenerator が入っていない人は、インストールお願いします

    • npm install express-generator -g
  • express --help でオプションを確認します。

  • ここは、完全に好みになるので, view engine と css はお好みのオプションを選んで、変換するのも勉強になるかと思います
express myApp_mongodb --pug --view=pug --css=sass --git
cd myApp_mongodb/
yarn
yarn add mongodb
yarn add assert
DEBUG=myapp-mongodb:* npm start
  • 実行すれば、localhost3000で立ち上がっているのがわかります。

  • もし、ポート番号を変える必要がある場合は、bin/www ファイルを変更してください

  • bin/www

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
  • 現時点の構成です
    • 今後ファイルの置き場所は変わるかもしれませんが

├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│     └── style.sass
├── routes
│ ├── index.js
│ ├── libCallback.js
│ └── users.js
├── views
│ ├── error.pug
│ ├── index.pug
│ └── layout.pug
└── yarn.lock
  • routes/index.js
var express = require('express');
var router = express.Router();
const MongoClient = require('mongodb').MongoClient
const assert = require('assert')


const url = 'mongodb://localhost:27017/myproject'
const dbName = 'myproject'
const client = new MongoClient(url)
const lib = require('./libCallback.js')
const { insertManyDocuments, insertOneDocument, findDocuments, deleteManyDocuments, findDocuments_2 } = lib


client.connect(err => {
    assert.equal(null, err)
    console.log("Connected successfully to server")
    const db = client.db(dbName)

  /* GET home page. */
  router.get('/', function(req, res, next) {
    console.log(req.query)
    res.render('index', { title: 'mongodb' });
  });

    router.get('/delete', (req, res) => {
        console.log(req.query)
        deleteManyDocuments(db, (result) => {
            console.log(result.result)
        })
        res.send('delete done')
    })
    router.get('/insertMany', (req, res) => {
        console.log(req.query)
        insertManyDocuments(db, (result) => {
            console.log(result.result)
        })
        res.send('insert done')
    })
    router.get('/find', (req, res) => {
        console.log(req.query)
        findDocuments(db, (docs) => {
            console.log(docs)
        })
        res.send('find done')
    })
    router.get('/find2', (req, res) => {
        const findsData = req.query
        console.log(req.query)
        findDocuments_2({ db, findsData },  (docs) => {

            console.log(docs)
        })
        res.send('find2 done')
  })
})


module.exports = router;
  • routes/libCallback.js
const assert = require('assert')


module.exports.updateOneDocument = (db, callback) => {
    const collection = db.collection('documents')
    collection.updateOne(
        { a: 1 },
        { $set: { a: 100 }}, (err, result) => {
            assert.equal(err, null)
            console.log("update the records")
            callback(result)
        })
}

module.exports.deleteManyDocuments = (db, callback) => {
    const collection = db.collection('documents')
    collection.deleteMany({}, (err, result) => {
        assert.equal(err, null)
        console.log("Delete All")
        callback(result)
    })
}

module.exports.findDocuments = (db, callback) => {
    const collection = db.collection('documents')
    collection
        .find({})
        .project({ '_id': 0})
        .toArray((err, docs) => {
            assert.equal(err, null)
            console.log("Founds the records")
            callback(docs)
        })
}

module.exports.findDocuments_2 = ({ db, findsData }, callback) => {
    const collection = db.collection('documents')
    const value = Object.entries(findsData)[0][1]
    const key   = Object.entries(findsData)[0][0]
    const fixFindsData = {}
    const type = fixFindsData[key] = (value - 0)
    console.log('NaN or integer: ', type)
    const input = type ? fixFindsData : findsData
    collection
        .find(input)
        .project({ '_id': 0})
        .toArray((err, docs) => {
            assert.equal(err, null)
            console.log("Founds the records")
            callback(docs)
        })
}

module.exports.insertManyDocuments = (db, callback) => {
    const collection = db.collection('documents')
    collection.insertMany([
        { name: 'toto', age: 25, weight: 65, height: 176 },
        { name: 'momo', age: 27, weight: 50, height: 163 },
        { name: 'koko', age: 25, weight: 87, height: 189 },
        { name: 'nattou', age: 25, weight: 47, height: 110 },
        { name: 'hotaru', age: 25, weight: 65, height: 179 },
        { name: 'takuma', age: 55, weight: 78, height: 183 },
    ], (err, result) => {
        assert.equal(err, null)
        assert.equal(6, result.result.n)
        assert.equal(6, result.ops.length)
        console.log("Insered  documents")
        callback(result)
    })
}
 git clone https://github.com/atoris1192/qrunch_mongodb_express.git
 cd qrunch_mongodb_express/
 yarn
 git reset --hard 56c0ed51
 DEBUG=myapp-mongodb:* npm start
  • localhost3000で立ち上がるはずです。 両方のexpressを同時に立ち上げたい場合は、どちらかのportを変更してください。
  • 次回部分の検索部分の実装をしているところなんですが、この部分は、人によってすっかり変わるところなんで、自分なりの実装を考えてみるとすごく勉強になるかと思います。
  • 次回から、実際HTMLをポチポチ変更していきたいと思います。
  • よろしくおねがいします。 m(__)m

関連記事

コメントはありません。
atoris1192
atoris1192.qrunch.io
フォロー
フォロワー
ブログを開設

クランチで技術ブログを
始めてみませんか?

この先は、クランチへのアカウント登録、及びログインが必要なページになります。

Markdownの書き方
見出し # 見出し(h1)
## 見出し(h2) , ### 見出し(h3) ...
リスト - 箇条書き
   - タブでインデント
番号付きリスト 1. テキスト
2. テキスト
改行 行末に半角スペース2つ
リンクの挿入 [タイトル](https://xxx.com)
引用 > テキスト
コード挿入 ```cpp:title
code
```
画像の挿入 ![代替テキスト](URL "タイトル")
太字 **テキスト**
斜体 *テキスト*
打消し線 ~~テキスト~~
水平線 ***
技術ブログを開設
ログイン