使用Express和MongoDB创建即席的RestAPI
要做的事情
使用Node.js的MVC框架Express和NoSQL数据库MongoDB来创建一个简单的RestAPI,可以进行用户信息的注册、修改和删除。
请求和响应以json格式进行(与NoSQL非常兼容)。
将MongoDB在Docker容器上启动。

准备
在家里安装Homebrew和Node.js
在Docker上启动MongoDB。
在Docker容器上启动MongoDB。
虽然也可以直接安装,但既然有机会,就尝试使用Docker。
# Dockerインストール
$ brew install docker --cask
# MongoDBイメージ取得
$ docker pull mongo
# コンテナを作成して起動
# ホストOS側は27018ポート、コンテナ側は27017ポート(MongoDBのデフォルト)を使用
$ docker run -p 27018:27017 --name mongo-test -d mongo
创建Node.js项目
创建基础项目并进行环境构建。
因为认为Docker已经启动,所以启动一个新的终端。
# ディレクトリ作成
$ mkdir test-app
# 初期化処理(問合せ無しでpackage.json作成)
$ npm init -y
# 必要nodeモジュール(expressとmongoDB操作用モジュール)をインストール
$ npm install express mongoose
创建模型
定义一个作为基础用户模型的模式。
# ディレクトリ作成
$ mkdir server
$ cd server
$ mkdir models
# Model定義JavaScript作成
$ touch models/user.js
用VSCode或其他编辑器打开user.js文件进行编辑。
这里关键的Model有三个字段:唯一的ID、名字和年龄。
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userSchema = new Schema({
id: {
type: String,
required: true,
unique: true
},
name: { type: String },
age: { type: Number}
});
module.exports = mongoose.model('users', userSchema);
制作路由器和控制器
定義一个路由器来定义当实际收到HTTP请求时的行为,并定义一个控制器来控制整个过程,使用该模型。由于这是一个小规模的项目,因此将它们合并在一个名为server.js的文件中。
# ディレクトリ移動
$ cd ..
# Router&Controller定義JavaScript作成
$ touch server.js
打开server.js文件并在VSCode或其他编辑器中进行编辑。
假设HTTP请求将在3001端口上进行监听。
为了减少代码量,省略了除注册以外的错误处理。
const express = require('express');
const mongoose = require('mongoose');
const User = require('./models/user');
// DB接続
mongoose.connect('mongodb://localhost:27018/sampledb');
const app = express();
app.use(express.json({extended: true}));
// ユーザ情報登録
app.post('/users', (req, res) => {
const user = new User(req.body);
user.save((err, addedUser) => {
if (err)
return res.status(400).json({
errorMessage: 'failed to add the user.'
});
res.send(addedUser);
});
});
// ユーザ情報取得(全件)
app.get('/users', (req, res) => {
User.find({}, (err, users) => {
res.send(users);
});
});
// ユーザ情報取得(ID指定)
app.get('/users/:id', (req, res) => {
const params = req.params.id;
User.find({id: params}, (err, user) => {
res.send(user);
});
});
// ユーザ情報削除(全件)
app.delete('/users', (req, res) => {
User.remove({}, err => {
res.send(true);
});
});
// ユーザ情報削除(ID指定)
app.delete('/users/:id', (req, res) => {
const params = req.params.id;
User.remove({id: params}, (err, deletedUser) => {
res.send(deletedUser);
});
});
// ポート3001番でlisten
app.listen(3001, () => {
console.log(`Server up on 3001`);
});
服务器启动
$ node server.js
确认动作(curl命令)
$ node server.js
用curl命令尝试注册、获取和删除用户信息。
_id和__v是由MongoDB自动分配的字段,分别用作对象ID和版本管理。
# Allen登録
$ curl -X POST -H 'Content-Type:application/json' -d '{"id":"001","name":"Allen","age":20}' http://localhost:3001/users
# Allen登録結果
{"_id":"607bce198776e444bd55422b","id":"001","name":"Allen","age":20,"__v":0}%
# Yuki登録
$ curl -X POST -H 'Content-Type:application/json' -d '{"id":"002","name":"Yuki","age":26}' http://localhost:3001/users
# Yuki登録結果
{"_id":"607c3bf502ac68477a41ee10","id":"002","name":"Yuki","age":26,"__v":0}%
# 全件取得
$ curl -X GET http://localhost:3001/users
# 取得結果
[{"_id":"607bce198776e444bd55422b","id":"001","name":"Allen","age":20,"__v":0},{"_id":"607c3bf502ac68477a41ee10","id":"002","name":"Yuki","age":26,"__v":0}]%
# IDを指定して取得
$ curl -X GET http://localhost:3001/users/001
# 取得結果
[{"_id":"607bce198776e444bd55422b","id":"001","name":"Allen","age":20,"__v":0}]%
# IDを指定して削除
$ curl -X DELETE http://localhost:3001/users/001
# 削除結果
{"n":1,"ok":1,"deletedCount":1}%
# 削除確認のため全件取得
$ curl -X GET http://localhost:3001/users
# 残ってるのはYukiだけ
[{"_id":"607c3bf502ac68477a41ee10","id":"002","name":"Yuki","age":26,"__v":0}]%
# 全件削除
$ curl -X DELETE http://localhost:3001/users
# 削除結果
true%
# 削除確認のため全件取得
$ curl -X GET http://localhost:3001/users
# 何も残っていない
[]%
API 測試員
由于curl命令在视觉上不易理解,所以使用Chrome扩展程序Talend API Tester进行视觉确认。
在这里我们只确认注册和获取所有记录。

接下来,假设Yuki以相同的方式进行注册,接下来是获取所有条目。

就是这样确认了。
当然,通过改变方法也可以进行删除操作。
这样一来,就可以创建一个简单的RestAPI来操作数据库了。
作为应用,我想尝试做的事情。
フロントエンドをReactとかで作りたい。
今回DockerはMongoDBでしか使わなかったが、Node.jsそのものからDocker上で環境構築したい。VSCodeでDockerコンテナ上のワークスペースも編集できるらしい(参考)。
TypeScriptで書けるようにしたい(参考)。
请提供参考网站。
今回DockerはMongoDBでしか使わなかったが、Node.jsそのものからDocker上で環境構築したい。VSCodeでDockerコンテナ上のワークスペースも編集できるらしい(参考)。
TypeScriptで書けるようにしたい(参考)。
React和Express的同步开发教程,专为初级JavaScript全栈工程师设计
通往MongoDB(Mongoose)高级使用者之路
使用curl命令进行操作