利用express搭建一个restful api 服务器

学习express有几天了,记录一下内容也给入门的兄弟们一点提示。

想要解决的问题:

  1. node开发过程中自动重启服务器,无需每次都要运行node index.js启动服务器(nodemon)
  2. 使用ES6,ES7 编写代码,自动编译 使用import,export新特性。(babel)
  3. 使用express开发RESTFUL API,模块化开发。
  4. 学习postman中的提交内容方式。
  5. 利用mongoose中间件来实现model层映射。
  6. 利用body-parser中间件来实现提交内容解析。(multipart/form-data数据类型不支持,此种提交多用于form带file类型提交)

1. 开发环境

  [email protected]

  [email protected]

  windows 10

  portableGit

2. 搭建开发目录结构 (代码地址https://github.com/jingyinggong/expressjs_app1.git

  2.1 启动portableGit

  2.2 cd /d/

  2.3 mkdir web

  2.4 在web目录下创建src目录和dist目录, 并创建相应文件

  目录结构如下:

  |-- dist

  |-- .babelrc
  |-- package.json

  |-- postman.json
  `-- src
    |-- index.js
    |-- models
    |    `-- user.js
    `-- routes
      |-- index.js
      `-- user.js

  2.5 在web目录下运行npm install

3. 填充目录文件内容

  3.1 package.json

//package.json
{
  "name": "app2",
  "version": "1.0.0",
  "description": "test for babel",
  "main": "dist/index.js",
  "scripts": {
    "watch": "babel -w src/ -d dist/",
    "build": "babel src/ -d dist/",
    "serve": "babel -w src/ -d dist/ | nodemon --watch dist",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "LoganGong",
  "license": "MIT",
  "devDependencies": {
    "express": "latest",
    "mongoose": "latest",
    "lodash": "latest",
    "eslint": "latest",
    "body-parser": "latest",
    "babel": "^6.23.0",
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-stage-0": "^6.24.1",
    "nodemon": "^1.17.5"
  }
}

  3.2 .babelrc

{
    "presets": ["env", "stage-0"]
}

  3.3 src/index.js

import Routes from ‘./routes‘;
import mongoose from ‘mongoose‘;

import express from ‘express‘; // call express
var app = express(); // define our app using express

mongoose.connect(‘mongodb://localhost:27017/chat‘);

var port = process.env.PORT || 8080; // set our port

var router = express.Router(); // get an instance of the express Router

router.use(function(req, res, next) {
    console.log(‘Something is happening.‘);
    next(); // make sure we go to the next routes and don‘t stop here
});
app.use(‘/api‘, Routes);

  3.4 src/routes/index.js

import { Router } from ‘express‘;
import User from‘./user‘;

const router = Router();

router.use(‘/users‘, User);

exports = module.exports = router;

  3.5 src/routes/user.js

import { Router } from ‘express‘;

import User from ‘../models/user‘;

var bodyParser = require(‘body-parser‘);

const router = Router();

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.raw());

router.route(‘/‘).get((req, res) => {
    User.find(function (err, users) {
        if (err) res.send(err);
        res.json(users);
    });
}).post((req, res) => {
    var user = new User(); // create a new instance of the Bear model
    user.name = req.body.name; // set the bears name (comes from the request)
    user.nickname = req.body.nickname;
    user.gender = req.body.gender;
    user.password = req.body.password;
    user.role = req.body.role;
    user.createdTime = new Date().getTime();
    // save the bear and check for errors
    user.save(function (err) {
        if (err) res.send(err);
        console.log(user);
        res.json(user);
    });
}).patch((req, res) => {
    console.log(req.body);
    User.updateMany({ gender: req.body.gender }, {nickname: req.body.nickname}, function (err, users) {
        if (err) res.send(err);
        res.json(users);
    });
});

router.route(‘/:uid‘).get((req, res) => {
    User.findById(req.params.uid, function (err, user) {
        if (err) res.send(err);
        res.json(user);
    });
}).delete((req, res) => {
    console.log(req.params.uid)
    User.deleteOne({ _id: req.params.uid }, function (err, user) {
        if (err) res.send(err);
        console.log({"msg": req.params.uid + ‘ is deleted‘});
        User.find(function (err, users) {
            if (err) res.send(err);
            res.json(users);
        });
    });
});

export default router;

  3.7 src/models/user.js

import mongoose from ‘mongoose‘;

//console.log(mongoose);

var Schema = mongoose.Schema;

var UserSchema = new Schema({
    name: String,
    nickname: String,
    gender: Number,
    password: String,
    createdTime: { type: Date, default: Date.now },
    role: Number  //1: admin 2: group owner, 3: normal user
});

export default mongoose.model(‘User‘, UserSchema);

  3.7 postman.json

{
    "info": {
        "_postman_id": "5d769b8a-47b5-4242-92cf-fef3523bcda4",
        "name": "express_app1_restful_api",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "get user item",
            "request": {
                "method": "GET",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded"
                    }
                ],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": [
                        {
                            "key": "name",
                            "value": "BearKing",
                            "description": "",
                            "type": "text"
                        }
                    ]
                },
                "url": {
                    "raw": "http://localhost:8080/api/users/5b12581a3cb88b2eacb45b1c",
                    "protocol": "http",
                    "host": [
                        "localhost"
                    ],
                    "port": "8080",
                    "path": [
                        "api",
                        "users",
                        "5b12581a3cb88b2eacb45b1c"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "delete user item",
            "request": {
                "method": "DELETE",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded"
                    }
                ],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": [
                        {
                            "key": "name",
                            "value": "BearKing",
                            "description": "",
                            "type": "text"
                        }
                    ]
                },
                "url": {
                    "raw": "http://localhost:8080/api/users/5b125ce2f0196b1b8097ea44",
                    "protocol": "http",
                    "host": [
                        "localhost"
                    ],
                    "port": "8080",
                    "path": [
                        "api",
                        "users",
                        "5b125ce2f0196b1b8097ea44"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "add a user",
            "request": {
                "method": "POST",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded"
                    }
                ],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": [
                        {
                            "key": "name",
                            "value": "张三2",
                            "type": "text",
                            "description": ""
                        },
                        {
                            "key": "nickname",
                            "value": "张三2",
                            "type": "text",
                            "description": ""
                        },
                        {
                            "key": "gender",
                            "value": "3",
                            "type": "text",
                            "description": ""
                        },
                        {
                            "key": "password",
                            "value": "1233",
                            "type": "text",
                            "description": ""
                        },
                        {
                            "key": "role",
                            "value": "22",
                            "type": "text",
                            "description": ""
                        }
                    ]
                },
                "url": {
                    "raw": "http://localhost:8080/api/users",
                    "protocol": "http",
                    "host": [
                        "localhost"
                    ],
                    "port": "8080",
                    "path": [
                        "api",
                        "users"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "get user list",
            "request": {
                "method": "GET",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded"
                    }
                ],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": [
                        {
                            "key": "name",
                            "value": "BearKing",
                            "description": "",
                            "type": "text"
                        }
                    ]
                },
                "url": {
                    "raw": "http://localhost:8080/api/users/",
                    "protocol": "http",
                    "host": [
                        "localhost"
                    ],
                    "port": "8080",
                    "path": [
                        "api",
                        "users",
                        ""
                    ]
                }
            },
            "response": []
        },
        {
            "name": "update user list",
            "request": {
                "method": "PATCH",
                "header": [
                    {
                        "key": "Content-Type",
                        "value": "application/x-www-form-urlencoded"
                    }
                ],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": [
                        {
                            "key": "gender",
                            "value": "1",
                            "description": "",
                            "type": "text"
                        },
                        {
                            "key": "nickname",
                            "value": "shoott",
                            "description": "",
                            "type": "text"
                        }
                    ]
                },
                "url": {
                    "raw": "http://localhost:8080/api/users/",
                    "protocol": "http",
                    "host": [
                        "localhost"
                    ],
                    "port": "8080",
                    "path": [
                        "api",
                        "users",
                        ""
                    ]
                }
            },
            "response": []
        }
    ]
}

基本完成 express代码开发。

4. 安装mongodb

5. 启动mongodb

7. web目录下运行“npm run serve" 启动server

8. 运行postman

9. 文件-导入-选择web目录下的postman.json

10. 各种添加和列表测试就可以了。

原文地址:https://www.cnblogs.com/jingyingggong/p/9126254.html

时间: 2024-09-29 20:07:56

利用express搭建一个restful api 服务器的相关文章

搭建一个webpack微服务器

[前言]:因为最近在vue2.0的时候用到了webpack的externals,才发现我之前都只是用webpack做一些搭建完项目后的"收尾工作"--即打包,而没有把它纳入到项目开发的"主体过程"中来,真是"物不尽其用".于是就有了我今天的这篇学习文章:利用webpack-dev-server搭建一个webpack的服务器 参考资料: webpack-dev-server的github地址:https://github.com/webpack/w

一个Restful Api的访问控制方法

最近在做的两个项目,都需要使用Restful Api,接口的安全性和访问控制便成为一个问题,看了一下别家的API访问控制办法. 新浪的API访问控制使用的是AccessToken,有两种方式来使用该AccessToken: 1.API请求 URL 的后面加上一个AccessToken 2.Http头里面加一个字段AccessToken=xxx 这种AccessToken是写死在程序里面的,在每次请求的时候附带上,对于这种AccessToekn新浪那边有过期时间,过期之后就无法再使用了. 很明显这

Anroid搭建一个局域网Web服务器

前言   很多开发者看到这个标题表示很怪异,Android怎么可能搭建服务器呢?根本用不到呀,这个项目毫无价值.我表示很理解这一类的开发者,毕竟每个人的经验经历都是有限的. 必须要说说我们的用处(需要用这个功能的人自然不用解释),比如在TV开发中,现在我们有一个电视盒子,上面跑着我们的一个apk,假如我们现在用微信网页或者QQ网络连接了我们的apk软件,我们需要把一个视频传到电视上播放,这个时候是不是需要我们的apk作为服务端来接受文件了?这只是一个例子,可能还有局限性,更多的用处大家自己去发挥

Vue.js(15)之 json-server搭建模拟的API服务器

json-server搭建模拟的API服务器 运行命令 npm install json-server -D 全局安装 json-server 项目根目录下创建 mock 文件夹 mock 文件夹下添加 db.json 文件,内容如下: { "students": [ { "id": 1, "name": "小明", "age": 20}, { "id": 2, "name&q

express搭建简易web的服务器

express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. 先到(nodejs.org)这个网站下载,点击如下图处下载任意一版,下载好以后解压安装. 创建一个文件夹,在其文件中(shift+右键)打开命令行工具通过(npm init) 命令为你的应用创建一个package.json 文件.在创建 package.json 文件时有以下步骤. (shift+右

node搭建一个简单的服务器

搭建一个简单的服务器 1 引入http模块 两个参数 req: request 请求 res: responese 响应 module require('mod1') node_modules 文件 require('./mode1') 发布自己的模块 去 npmjs.com 去注册一个账户 在控制台中 npm login username password email npm init npm publish cnpm install express const express = requi

用python写一个restful API

# -*- coding: utf-8 -*- # 作者: 煮酒品茶 """ package.module ~~~~~~~~~~~~~~ python实现的图书的一个restful api. 参考restful设计指南 URL: http://www.ruanyifeng.com/blog/2014/05/restful_api.html restful api 一般模式: GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资

用nodejs搭建一个简单的服务器

使用nodejs搭建一个简单的服务器 nodejs优点:性能高(读写文件) 数据操作能力强 官网:www.nodejs.org 验证是否安装成功:cmd命令行中输入node -v 如果显示版本号表示安装成功 [常用命令] 切换盘符 d:进入文件夹 cd nodejs返回上一级目录 cd..清屏 cls展示目录 dir复制文件名 选中右键--复制历史操作 上箭头 执行文件 node 文件名(在文件文件夹目录中)停止命令行 ctrl+c nodejs可以使用的ECMAScript.读写文件.数据库操

【日记】搭建一个node本地服务器

用node搭建一个本地http服务器.首先了解htpp服务器原理 HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端.HTTP协议采用了请求/响应模型.客户端向服务器发送一个请求报文,请求报文包含请求的方法.URL.协议版本.请求头部和请求数据.服务器以一个状态行作为响应,响应的内容包括协议的版本.成功或者错误代码.服务器信息.响应头部和响应数据.下图表明了这种请求/响应模型. 以下是HTTP请求/响应的步骤: (1)客户端连接到Web服务器 一