一、准备工具

先确保电脑已经安装好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

mongose + express 写REST API的更多相关文章

  1. 用expressjs写RESTful API

    http://blog.csdn.net/kiwi_coder/article/details/36424671     用expressjs写RESTful API http://blog.csdn ...

  2. 使用Express构建RESTful API

    RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的 ...

  3. Django使用AJAX调用自己写的API接口

    Django使用AJAX调用自己写的API接口 *** 具体代码和数据已上传到github https://github.com/PythonerKK/eleme-api-by-django-rest ...

  4. 一个用beego写的API项目

    beego-api 一个使用beego写的API 支持Api日志 支持Swagger注解文档 项目地址: https://github.com/eternity-wdd/beego-api 使用说明 ...

  5. 通过express来打造api服务器

    通过express来打造api服务器[ 后端接口 ] 1.步骤 1.通过脚手架创建项目 const express = require('express'); const router = expre ...

  6. express 写一个简单的web app

    之前写过一个简单的web app, 能够完成注册登录,展示列表,CURD 但是版本好像旧了,今天想写一个简单的API 供移动端调用 1.下载最新的node https://nodejs.org/zh- ...

  7. 第一次写Web API接口

    API是什么?只知道是网络接口,具体怎么写?不会!如何调用?不会!那怎么办? 第一次的经历~~ 需求:为其他项目提供一个接口 功能:为项目提供询盘信息和商家信息,格式为Json字符串 拿过来,就开始做 ...

  8. Python用Django写restful api接口

    用Python如何写一个接口呢,首先得要有数据,可以用我们在网站上爬的数据,在上一篇文章中写了如何用Python爬虫,有兴趣的可以看看: https://www.cnblogs.com/sixrain ...

  9. 研发团队如何写好API接口文档

    导读 背景 痛点在哪? 为什么要写接口文档? API规范 接口工具 总结 背景        随着业务的发展,支撑组的项目也是越来越多.同时,从整个支撑组项目架构体系(含运维和运营体系),我们对系统业 ...

随机推荐

  1. eclipse安装STS遇到的问题

    eclipse安装STS时,在eclipse marketplase中搜索STS没有结果,从官网下载STS包,然后安装提示找不到JAR包, 解决方式: eclipse需要和STS包版本一致,如果STS ...

  2. odoo开发笔记 -- 安装Backend debranding去除odoo信息模块后 隐藏开发者模式

    Backend debranding 找到如下文件,将相关灰色代码注释掉. <?xml version="1.0" encoding="UTF-8"?&g ...

  3. 以太坊ERC20代币合约案例

    一.ERC20代币合约与web3调用 ERC20代币合约在小白看来觉得很高大上,但其实就是一个代币的定义标准,方便其他dapp统一调用各种代币的方法.如图: 二.ERC20合约标准 [官方链接] co ...

  4. web工程迁移---weblogic8迁移到jboss5遇到的异常

    原有的web工程是在weblogic8上运行的,但现在的要求是要运行到jboss5中,为如后迁移到更高版本的jboss做准备 由于我对weblogic没有过研究,所以之前的步骤都是有别人进行的,在进行 ...

  5. jieba分词(2)

    结巴分词系统中实现了两种关键词抽取法,一种是TF-IDF关键词抽取算法另一种是TextRank关键词抽取算法,它们都是无监督的算法. 以下是两种算法的使用: #-*- coding:utf-8 -*- ...

  6. freerdp服务器共享屏幕,skype lync终端显示黑屏的原因分析

    问题描述:freerdp支持远程桌面共享协议rdp,使用freerdp与skype终端进行远程桌面共享时.发送1080p 视频数据时 skype终端显示黑屏 经过分析,发现rdp协商参数大于一定值时, ...

  7. StreamSets学习系列之启动StreamSets时出现Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "test.to.ensure.security.is.configured.correctly" "read")错误的解决办法

    不多说,直接上干货! 问题详情 [hadoop@master streamsets-datacollector-]$ ./bin/streamsets dc Java 1.8 detected; ad ...

  8. [原] ubuntu 13.10 安装 winqq2013

    安装及下载地址:http://www.longene.org/forum/viewtopic.php?t=4700 ubuntu 13.10 64位系统安装后无法启动qq,因为缺少程序包.解决方案: ...

  9. js拦截全局ajax请求

    你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...

  10. Entity Framework 6.x - 创建模型来自于现有数据库

    Creating a Model from an Existing Database 一.创建数据库 Chapter2 USE master GO CREATE DATABASE Chapter2 G ...