一、准备工具

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

  1. const mongoose = require('mongoose');
  2.  
  3. mongoose.connect('mongodb://127.0.0.1/wuyan');
  4.  
  5. /**
  6. * 连接成功
  7. */
  8. mongoose.connection.once('connected', function () {
  9. console.log('数据库连接成功');
  10. });
  11.  
  12. /**
  13. * 连接异常
  14. */
  15. mongoose.connection.once('error', function (err) {
  16. console.log('数据库连接错误: ' + err);
  17. });
  18.  
  19. /**
  20. * 连接断开
  21. */
  22. mongoose.connection.once('disconnected', function () {
  23. console.log('数据库连接已关闭');
  24. });
  25.  
  26. module.exports = mongoose;

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

创建属于mongoose的Schema对象

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

  1. const mongoose = require('./db.js');
  2. const Schema = mongoose.Schema;
  3.  
  4. const userSchema = new Schema({
  5. username:String,
  6. password:String,
  7. gender:String
  8. })
  9.  
  10. const bookSchema = new Schema({
  11. title:String,
  12. desc:String,
  13. prize:String
  14. })
  15.  
  16. module.exports = {
  17. // users、books表示存放文档的集合名称(从myslq的角度看就是创建users表,表的字段是userSchema构造器写的属性)
  18. UserModel:mongoose.model('users',userSchema),
  19. BookModel:mongoose.model('books',bookSchema)
  20. }

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

对文档进行增删改查操作

  1. const model = require('./model');
  2.  
  3. // 注册账号
  4. function _Register(params = {}, callback) {
  5. model.UserModel.create(params, (err, res) => {
  6. if (!err) {
  7. console.log('注册成功')
  8. callback && callback(res);
  9. }
  10. })
  11. }
  12. _Register({username:'测试名',password:'1233454',gender:'男'});

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

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

  1. const model = require('./model');
  2.  
  3. // 注册账号
  4. function _Register(params = {}, callback) {
  5. model.UserModel.create(params, (err, res) => {
  6. if (!err) {
  7. console.log('注册成功')
  8. callback && callback(res);
  9. }
  10. })
  11. }
  12.  
  13. // 登录
  14. function _Login(params = {}, callback) {
  15. model.UserModel.find(params, (err, res) => {
  16. if (!err) {
  17. if (res.length > 0) {
  18. console.log('登录成功')
  19. callback && callback(res);
  20. } else {
  21. console.log('用户名或者密码错误')
  22. }
  23. }
  24. })
  25. }
  26.  
  27. function _AddBook(book = {}, callback) {
  28. model.BookModel.create(book, (err, res) => {
  29. if (!err) {
  30. console.log('添加书本成功')
  31. callback && callback(res);
  32. }
  33. })
  34. }
  35.  
  36. // 获取用户列表
  37.  
  38. function _GetUserList(parmas = {}, callback) {
  39. model.UserModel.find(parmas, (err, res) => {
  40. if (!err) {
  41. callback && callback(res);
  42. }
  43. })
  44. }
  45. module.exports = {
  46. register: _Register,
  47. login: _Login,
  48. addBook: _AddBook,
  49. getUserList: _GetUserList
  50. }

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

引入express文件写REST API接口

  1. const service = require('./model/service');
  2. const express = require('express');
  3. const bodyParser = require('body-parser')
  4. const app = express();
  5. // 获取post方法的传参 需要引入body-parser(npm install body-parser -- save)
  6. app.use(bodyParser.urlencoded({extended:false}))
  7.  
  8. // 静态文件
  9. app.use(express.static('public'));
  10.  
  11. // REST API
  12.  
  13. app.all('*', function (req, res, next) {
  14. res.header("Access-Control-Allow-Origin", "*");
  15. res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
  16. res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
  17. next();
  18. });
  19.  
  20. app.get('/login', (req, res) => {
  21. let params = req.query;
  22. service.register(params, (result) => {
  23. res.json(result)
  24. });
  25.  
  26. })
  27.  
  28. app.get('/userList', (req, res) => {
  29. let parmas = req.query;
  30. service.getUserList(parmas, (result) => {
  31. res.json(result);
  32. })
  33. })
  34.  
  35. app.post('/register',(req,res)=>{
  36. let parmas = req.body;
  37. service.register(parmas,(result)=>{
  38. res.json(result);
  39. })
  40. })
  41.  
  42. app.listen(3000, () => console.log('Example app listening on port 3000!'))

六、前端调用接口

  1. <!DOCTYPE html>
  2. <html lang="en">
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>express API</title>
  9. </head>
  10.  
  11. <body>
  12. <button onclick="getUserList()">获取所有用户数据</button>
  13. <div>
  14. <table>
  15. <thead>
  16. <tr>
  17. <td>姓名</td>
  18. <td>密码</td>
  19. <td>性别</td>
  20. </tr>
  21. </thead>
  22. <tbody class="content"> </tbody>
  23. </table>
  24. </div>
  25. <button onclick="register()">注册</button>
  26. </body>
  27. <script src="../public/js/jquery-3.3.1.js"></script>
  28. <script>
  29. function getUserList() {
  30. $.ajax({
  31. url: 'http://localhost:3000/userList',
  32. type: 'get',
  33. dataType: 'json',
  34. success: function (data, status) {
  35. let str = '';
  36. for (let i = 0; i < data.length; i++) {
  37. str = str + `
  38. <tr>
  39. <td>${data[i].username}</td>
  40. <td>${data[i].password}</td>
  41. <td>${data[i].gender}</td>
  42. </tr>
  43. `
  44. }
  45. $('.content').append(str);
  46.  
  47. },
  48. fail: function (err, status) {
  49. console.log(err)
  50. }
  51. })
  52. }
  53.  
  54. function register() {
  55. $.ajax({
  56. url: 'http://localhost:3000/register',
  57. data: {
  58. username:'z',
  59. password:'123456',
  60. gender:'男'
  61. },
  62. type: 'post',
  63. dataType: 'json',
  64. success: function (data, status) {
  65.  
  66. },
  67. fail: function (err, status) {
  68. console.log(err)
  69. }
  70. })
  71. }
  72.  
  73. </script>
  74.  
  75. </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. 彻底弄懂“PKIX path building failed”问题

    SSL的基础知识 SSL的全称是Secure Socket Layer.它的通信流程如下图所示,客户端与服务端会通过几次通信,通过非对称加密创建出一个加密密钥,用于以后的对称信息加密. 1,客户端明文 ...

  2. C、C++打包成.dll .so .a 给Unity使用

    C.C++打包成.dll .so .a 给Unity使用 打包.dll库 工具:VS 使用VS新建项目 选择不大于.NET3.5的版本 选择Visual C++ -> Win32 控制台应用程序 ...

  3. redis哨兵集群环境搭建

    一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...

  4. How To Scan QRCode For UWP (4)

    QR Code的全称是Quick Response Code,中文翻译为快速响应矩阵图码,有关它的简介可以查看维基百科. 我准备使用ZXing.Net来实现扫描二维码的功能,ZXing.Net在Cod ...

  5. 阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结

    现在收集到如下有用的信息: 阿里巴巴公开的Java开发规范:https://yq.aliyun.com/articles/69327?utm_content=m_10088 google公开的Java ...

  6. 线程中的同步辅助类Semaphore

    同步辅助类  线程池  并发集合类 都是在线程同步的基础上增加了一些同步的东西,在线程同步的基础上更好的实现线程同步.实现的效率更高,更方便而已. 多线程并不是很难 需要你把代码写出来...然后分析运 ...

  7. [个人项目] 使用 Vuejs 完成的音乐播放器

    Foreword 虽然音乐播放这类的项目的静态展示居多,业务逻辑并不复杂,但是对于我这种后端出身的前端萌新来说,能使用vuejs完成大部分功能, 也会有许多收获. api:我使用的是一个开源的 nod ...

  8. T-SQL 分布式查询

    --返回本地服务器中定义的链接服务器列表. EXEC sys.sp_linkedservers /* 创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射. 当用户登录 ...

  9. (转)Spring事务管理(详解+实例)

    文章转自:http://blog.csdn.net/trigl/article/details/50968079 写这篇博客之前我首先读了<Spring in action>,之后在网上看 ...

  10. window如何一键关闭所有进程程序

    1.桌面创建一个快捷方式,点击鼠标右键跳出的菜单=> 新建=>快捷方式 2. 在“请键入对象的位置(T)”下方的文本框中输入: taskkill /F /FI "USERNAME ...