※ monoose使用
Webサーバを作成
パッケージのインストール
npm init
npm i express mongoose
npm i -D nodemon typescript ts-node @types/node
その他の型定義パッケージは後で適当にインストールする。
tsconfigの作成
npx tsconfig.json
npm script
package.json
"scripts": {
"start": "NODE_ENV=production node server",
"dev": "nodemon -L",
"seed": "ts-node seeder.ts"
},
nodemonの設定
nodemon.json
{
"watch": ["src"],
"ext": "ts",
"exec": "ts-node ./src/server.ts"
}
アプリケーションの作成
src/server.js
/**
* サーバインスタンス
*/
const app = express();
app.use(express.json());
/**
* 開発環境: ログの有効化
*/
if (process.env.NODE_ENV === "development") {
app.use(morgan("dev"));
}
/**
* サーバーの起動
*/
const server = app.listen(process.env.PORT || 3000, () =>
console.log(`${process.env.NODE_ENV} server is listening on PORT: ${process.env.PORT}`)
);
/**
* Handle Unhandled Rejections
*/
process.on("unhandledRejection", (err, promise) => {
console.log("<)))><...Error: unhandledRejection", err);
server.close(() => process.exit(1));
});
起動確認
npm run dev
curl -i http://localhost:3000/
Dockerコンテナ化
Dockerfile作成
touch Dockerfile
FROM node:dubnium
RUN mkdir /app
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3000
CMD bash -c "npm install && npm run dev"
起動確認
docker build -t node-test:0.1 .
docker run -p 3000:3000 -ti node-test:0.1
Docker-Compose
touch docker-compose.yml
docker-compose.yml
version: "2"
services:
web:
build: .
volumes:
- ./:/app
ports:
- "3000:3000"
links:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"
logging:
driver: none
volumes:
- ./mongo_db:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: root
logging:
driver: none
補足
mongo-express
DBをブラウザからGUIで確認できる。
あると少し便利なので入れてある。
データの永続化
volumes:
- ./mongo_db:/data/db
docker-compose.yml
と同じ階層に、mongo_db
フォルダを作成しておき、volumes
として使用する。
こうすることでコンテナ落としてもデータは保持される。
git管理はしない。
.gitignore
node_modules/
mongo_db/
config/config.env
起動確認
docker-compose up
DB接続
接続用モジュール
mkdir config
cd config
touch db.js
config/db.js
var mongoose = require("mongoose");
const dotenv = require("dotenv");
// 環境変数の読込
dotenv.config({ path: "./config/config.env" });
//DB接続
const connectDB = async () => {
const conn = await mongoose.connect(process.env.MONGO_URI, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
console.log(`<)))><...mongoDB Connected: ${conn.connection.host}`);
};
module.exports = connectDB;
接続
src/server.js
import connectDB from "../config/db";
/**
* DB接続
*/
connectDB();
/**
* サーバインスタンス
*/
const app = express();
...省略
完了/起動確認
docker-compose up