mongose + express 写REST API

一、准备工具

先确保电脑已经安装好nodejs

1.mongoose;安装非常简单: npm install mongoose --save   【mongoose封装了mongodb的方法,调用mongoose的api可以很轻松的对mongodb进行操作】

2.express;npm install express --save                    【Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,

和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。

3.mongodb(mongodb安装可以看我写的博客)

二、新建db.js文件,引入mongoose连接mongodb数据库服务,

将这个文件模块化,module.exports = mongoose;暴露mongoose,方便其他文件require引入使用

const mongoose = require(‘mongoose‘);

mongoose.connect(‘mongodb://127.0.0.1/wuyan‘);

/**
 * 连接成功
 */
mongoose.connection.once(‘connected‘, function () {
    console.log(‘数据库连接成功‘);
});

/**
 * 连接异常
 */
mongoose.connection.once(‘error‘, function (err) {
    console.log(‘数据库连接错误: ‘ + err);
});

/**
 * 连接断开
 */
mongoose.connection.once(‘disconnected‘, function () {
    console.log(‘数据库连接已关闭‘);
}); 

module.exports = mongoose;

三、新建model.js文件,引入上面新建的db.js文件

创建属于mongoose的Schema对象

构造users跟books两个集合,并导出model对象供其他文件使用

const mongoose = require(‘./db.js‘);
 const Schema = mongoose.Schema;

 const userSchema = new Schema({
     username:String,
     password:String,
     gender:String
 })

 const bookSchema = new Schema({
    title:String,
    desc:String,
    prize:String
})

module.exports = {
    // users、books表示存放文档的集合名称(从myslq的角度看就是创建users表,表的字段是userSchema构造器写的属性)
    UserModel:mongoose.model(‘users‘,userSchema),
    BookModel:mongoose.model(‘books‘,bookSchema)
}

四、新建service.js文件,引入上面新建的model.js文件

对文档进行增删改查操作

const model = require(‘./model‘);

// 注册账号
function _Register(params = {}, callback) {
    model.UserModel.create(params, (err, res) => {
        if (!err) {
            console.log(‘注册成功‘)
            callback && callback(res);
        }
    })
}
_Register({username:‘测试名‘,password:‘1233454‘,gender:‘男‘});

在存放service.js的文件夹下打开命令行,键入node service.js 即可看到效果

不过上面做的并不能实现我说的目地,所以继续将这个文件的各个方法暴露出去

const model = require(‘./model‘);

// 注册账号
function _Register(params = {}, callback) {
    model.UserModel.create(params, (err, res) => {
        if (!err) {
            console.log(‘注册成功‘)
            callback && callback(res);
        }
    })
}

// 登录
function _Login(params = {}, callback) {
    model.UserModel.find(params, (err, res) => {
        if (!err) {
            if (res.length > 0) {
                console.log(‘登录成功‘)
                callback && callback(res);
            } else {
                console.log(‘用户名或者密码错误‘)
            }
        }
    })
}

function _AddBook(book = {}, callback) {
    model.BookModel.create(book, (err, res) => {
        if (!err) {
            console.log(‘添加书本成功‘)
            callback && callback(res);
        }
    })
}

// 获取用户列表

function _GetUserList(parmas = {}, callback) {
    model.UserModel.find(parmas, (err, res) => {
        if (!err) {
            callback && callback(res);
        }
    })
}
module.exports = {
    register: _Register,
    login: _Login,
    addBook: _AddBook,
    getUserList: _GetUserList
}

五、新建app.js文件 并引入上面新建的service.js文件

引入express文件写REST API接口

const service = require(‘./model/service‘);
const express = require(‘express‘);
const bodyParser = require(‘body-parser‘)
const app = express();
// 获取post方法的传参 需要引入body-parser(npm install body-parser -- save)
app.use(bodyParser.urlencoded({extended:false}))

// 静态文件
app.use(express.static(‘public‘));

// REST API

app.all(‘*‘, function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    next();
});

app.get(‘/login‘, (req, res) => {
    let params = req.query;
    service.register(params, (result) => {
        res.json(result)
    });

})

app.get(‘/userList‘, (req, res) => {
    let parmas =  req.query;
    service.getUserList(parmas, (result) => {
        res.json(result);
    })
})

app.post(‘/register‘,(req,res)=>{
    let parmas = req.body;
    service.register(parmas,(result)=>{
        res.json(result);
    })
})

app.listen(3000, () => console.log(‘Example app listening on port 3000!‘))

六、前端调用接口

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>express API</title>
</head>

<body>
    <button onclick="getUserList()">获取所有用户数据</button>
    <div>
        <table>
            <thead>
                <tr>
                    <td>姓名</td>
                    <td>密码</td>
                    <td>性别</td>
                </tr>
            </thead>
            <tbody class="content"> </tbody>
        </table>
    </div>
    <button onclick="register()">注册</button>
</body>
<script src="../public/js/jquery-3.3.1.js"></script>
<script>
    function getUserList() {
        $.ajax({
            url: ‘http://localhost:3000/userList‘,
            type: ‘get‘,
            dataType: ‘json‘,
            success: function (data, status) {
                let str = ‘‘;
                for (let i = 0; i < data.length; i++) {
                    str = str + `
                        <tr>
                            <td>${data[i].username}</td>
                            <td>${data[i].password}</td>
                            <td>${data[i].gender}</td>
                        </tr>
                        `
                }
                $(‘.content‘).append(str);

            },
            fail: function (err, status) {
                console.log(err)
            }
        })
    }

    function register() {
        $.ajax({
            url: ‘http://localhost:3000/register‘,
            data: {
               username:‘z‘,
               password:‘123456‘,
               gender:‘男‘
            },
            type: ‘post‘,
            dataType: ‘json‘,
            success: function (data, status) {

            },
            fail: function (err, status) {
                console.log(err)
            }
        })
    }

</script>

</html>

END

原文地址:https://www.cnblogs.com/zhangky/p/10281837.html

时间: 2025-01-09 05:36:47

mongose + express 写REST API的相关文章

用expressjs写RESTful API

expressjs expressjs是一个基于nodejs的web开发框架:http://expressjs.com/,这篇博客目的就是用expressjs写一个关于products的最简单的RESTful API 一个最简单express的例子 package.json { "name": "hello-world", "description": "hello world of express js", "ve

写微信API所遇到的问题

1.接口还没出来之前. 根据微信网页版的页面,自己做了页面,分成了两个页面,一个是登录之后的,一个是登录之前的.后来接口出来之后我师兄说要做成只有一个页面时,我就有点吓到了,想想都觉得难,后来用了JQ的hide():函数,觉得只要有方法,什么都变得很简单. 2.关于接口如何调用的问题. 在这个项目中大多都是用$.post();方法请求的,这样的话一般都发送的参数在我们地址栏里面就不会那么直接的看到,不过在Network那里还是可以看到的,在这里也可以知道请求都没有成功.并且可以知道请求后的返回值

Express 4.x API

express() express()用来创建一个Express的程序.express()方法是express模块导出的顶层方法. var express = require('express'); var app = express(); Methods express.static(root, [options]) express.static是Express中唯一的内建中间件.它以server-static模块为基础开发,负责托管 Express 应用内的静态资源. 参数root为静态资源

React深入 - 手写redux api

简介: 手写实现redux基础api createStore( )和store相关方法 api回顾: createStore(reducer, [preloadedState], enhancer) 创建一个 Redux store 来以存放应用中所有的 state reducer (Function): 接收两个参数,当前的 state 树/要处理的 action,返回新的 state 树 preloadedState: 初始时的 state enhancer (Function): stor

PC端写的API接口和手机端APP联合调试

一.遇到问题的情况:项目框架:asp.net MVC5 ,写的给手机端调用的API接口. 二.自己在本地 IIS上部署项目,在手机端的请求服务器上把地址和端口换上本地部署的,如图所示 三.用管理员的身份打开VS,打开项目.找到调试-->附加到进程 找到部署项目运行对应的进程,选择后添加添加. 然后你的程序也就 进入调试模式,从APP上调用接口,就可以进入到PC端的调试模式,看看传参对不对,PC端代码逻辑等bug调试. 原文地址:https://www.cnblogs.com/ElvisZhong

Identity Server 4 原理和实战(完结)_单点登录实例(添加Flask客户端,Express.js的API)

idp授权资源的添加 如果下面哪个客户端想访问api2这个资源的话 就把它写上scope里面就可以了 nodeJS的客户端 python的库 MVC客户端分别访问API和API2 python客户端演示 登陆成功 mvcClient Hybird Client Angular 这就是单点登陆 原文地址:https://www.cnblogs.com/wangjunwei/p/10964898.html

android写一个API包给别人用,怎么来。

http://vip.shulink.com/files/article/html/45/45869/2345396.html http://vip.shulink.com/files/article/html/45/45869/2345403.html http://vip.shulink.com/files/article/html/45/45869/2347868.html http://vip.shulink.com/files/article/html/45/45869/2390293

express写的接口在疯狂刷新几十次后,服务器挂掉

用到的命令行: show status like 'Threads%'; show variables like '%max_connections%'; show global status like 'Max_used_connections'; 所以可以在mysql 命令行 尝试下重新设置以下最大连接数 set global max_connections=1000: 原文地址:https://www.cnblogs.com/XiaoYEBLog/p/12272774.html

Nodejs Express 4.X 中文API 1--- Application篇

相关阅读: Express 4.X API 翻译[一] --  Application篇 Express4.XApi 翻译[二] --  Request篇 Express4.XApi 翻译[三] --- Response篇 Express4.XApi 翻译[四] --- Router篇 本文是Express 4.x Api翻译系列的第一篇.由于笔者最近在学习NodeJs,刚刚接触了Node式的开发模式,被异步IO的编程方式深深吸引,于是准备系统学习一下这项新技术.因为没有任何NodeJs的基础,