一、准备工具

先确保电脑已经安装好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. [原创]K8 DNN密码解密工具(DotNetNuke Password Decrypt)

    工具: K8_DNN_Password_Decrypt编译: VS2012  C# (.NET Framework v2.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http: ...

  2. 生成代码的代码 之 POJO生成器 之二 模板实现

    在之前的一篇博客中,我们写了利用node.js来生成JAVA的POJO代码的方法.有评论说可以利用模板来做这件事.当时认为模板只能做简单的字符串替换,所以可能无法完成任务.但是,仔细的学习了一个模板 ...

  3. WebForm——JS检测浏览器是否是IE浏览器

    function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 && userAgen ...

  4. ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 2

    这是sqoop的 迁移数据到hive的报错 解决方案: 1,已经尝试不是  晚上大多数说的 libthrity的原因 2,查看自己的配置  sqoop-env.sh  如果配置的路径写的不对,对应的包 ...

  5. WTF小程序之<web-view>

    叨叨两句 昨天爬了一下午坑才出来的我向大家问好

  6. JLS中表达式的所有文法

    3.8. Identifiers Identifier: IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral Iden ...

  7. 使用java调用fastDFS客户端进行静态资源文件上传

    一.背景 上篇博客我介绍了FastDFS的概念.原理以及安装步骤,这篇文章我们来聊一聊如何在java中使用FastDFSClient进行静态资源的上传. 二.使用步骤 1.开发环境 spring+sp ...

  8. mybatis中预编译sql与非预编译sql

    预编译sql有缓存作用,非预编译没得 mybaits中带有#传参的有预编译左右,$没得 多用#传参 预编译语句的优势在于归纳为:一次编译.多次运行,省去了解析优化等过程:此外预编译语句能防止sql注入 ...

  9. Python中创建守护进程

    python 创建守护进程 python 的os.setdid()提供了类似linux c api的 setsid 也可以通过unix双fork创建守护进程. 几个相关的函数 os.umask(0) ...

  10. ES 入门记录之 match和term查询的区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...