说明:这段时间跟老师学习了一下mongodb数据库,这次也是第一次搭建后台服务,出了不少差错,特此来复盘一下,非常感谢对我提供帮助的同学~

一、使用 thinkjs + mongodb 创建后台服务

1.安装 thinkjs

安装thinkjs工具包

npm install -g think-cli

2.创建 thinkjs 项目

thinkjs new demo;
cd demo;
npm install;
npm start;

3.让框架支持 mongo 模型

demo项目的config文件夹中的extend.js文件中添加think-mongo模块

const mongo = require('think-mongo');

module.exports = [
mongo(think.app)
]

4.连接 mongodb

安装think-mongo

npm install think-mongo

修改config文件夹下的adapter.js文件的数据库

exports.model = {
type: 'mongo',
common: {
logConnect: isDev,
logger: msg => think.logger.info(msg)
},
mongo: {
host: '127.0.0.1',
database: 'mytest', // 自己创建的数据库名字
port: 27017,
user: '',
password: ''
}
};

5.创建 mongodb 数据库

demo项目根目录下新建一个db文件夹,用于存放数据,并开启数据库服务。

注意:以后也要在此文件夹下开启服务,不然后台连接不到数据库

mkdir db
cd db
mongod --dbpath=./

windows用户这里使用powershell终端,请勿使用cmd命令窗口。

6.添加路由

修改 index 控制器

进入controller文件夹中的index文件夹当中,修改返回数据

module.exports = class extends Base {
indexAction() {
return this.json({nihao: '\'nihao\''});
}
};

7.添加自己的控制器

新建一个任意名字的.js文件,然后自定义控制器返回的内容

const Base = require('./base.js');

module.exports = class extends Base {
async indexAction() {
// 获取从微信小程序传过来的 data 数据
const data1 = this.post('data');
// 将获取的数据 data1 添加到 student 表中
const a = await this.mongo('student').add(data);
// 从控制台输出 a 的地址
console.log(a);
return this.success('success');
} async addAction() {
const test = 'hello, world';
return this.json({test});
}
}

8.添加一个 mongodb 的控制器

controller文件夹新建一个user.js文件,里面写入控制器的内容

const Base = require('./base.js');

module.exports = class extends Base {
async indexAction() {
// controller 中实例化模型
const user = await this.mongo('user').find();
if (think.isEmpty(user)) {
return this.fail();
} else {
return this.success(user);
}
}
};

9.添加 model 文件

对每个模型进行各种操作,例如这里读取数据

module.exports = class extends think.Mongo {
find() {
return this.model('user').select();
};
}

二、配置微信小程序

微信小程序的注册与创建这里就不赘述了,直接进入主题

1.在页面加载函数中加入wx.request

在创建的微信小程序的index.js文件中加入如下代码

Page({
onLoad: function() {
wx.request({
// 这里的 test 是上面第7步创建的自己的控制器的名字
url: 'http://127.0.0.1:8360/test/index'
method: 'POST',
data: {
data: 'hello'
},
success: function (res) {
console.log(res.data)
}
})
}
})

三、检验前后端交互

1.开启demo服务

demo项目目录下

npm start;

2.开启mongodb数据库

demo目录下的db文件夹内开启数据库服务

cd db
mongod --dbpath=./

创建数据库和集合

use database
db.createCollection("collection")

3.编译微信小程序

结束

预期结果:

数据库中出现了微信小程序中添加的 data 数据,则前端数据成功发送给后台存入数据库;

微信小程序成功接收到后台返回的success信息;

demo项目控制台输出了一串接收数据的变量的地址。

至此,就完成了一个简单的前后端交互啦~

微信小程序 + thinkjs + mongoDB 实现简单的前后端交互的更多相关文章

  1. 微信小程序(一)--简单的介绍

    转自:https://developers.weixin.qq.com/miniprogram/dev/index.html 响应的数据绑定 框架的核心是一个响应的数据绑定系统. 整个小程序框架系统分 ...

  2. 微信小程序:wx.request之post请求后端无法获取数据的问题

    前言:小程序的开发中总是踩到各种坑,看文档也不知所云: 例如当我们在写微信小程序接口时,method请求方式有POST和GET两种,为了数据安全,我们会偏向于使用POST请求方式访问服务器端: 问题: ...

  3. 微信公众号商城、小程序商城、H5商城 实例 前后端源码

    CRMEB客户管理+电商营销系统  https://gitee.com/ZhongBangKeJi/CRMEB 演示站后台: http://demo.crmeb.net/admin 账号:demo 密 ...

  4. 微信小程序传数组(Json字符串)到Java后端

    一:小程序端: wxml中代码: <!--index.wxml--> <view> <view> <button bindtap="onShow&q ...

  5. Node之简单的前后端交互

    node是前端必学的一门技能,我们都知道node是用的js做后端,在学习node之前我们有必要明白node是如何实现前后端交互的. 这里写了一个简单的通过原生ajax与node实现的一个交互,刚刚学n ...

  6. 微信小程序实战--开发一个简单的快递单号查询

    功能如图: 虽然工作中只负责小程序后台开发,但是还是小程序开发产生了浓厚的兴趣,官方文档也是超级详细了 这里就简单做一个快递单号的查询: 新建一个page: 接着就可以写wxml了.这里用一个简单的i ...

  7. 微信小程序wx.request的简单封装

    前言 之前写小程序,每次请求后台时都直接调用原生的API,wx.request,每次都要写url,data,回调函数等,正好前段时间,小程序项目需要添加新内容,趁此机会,做一个封装的请求工具,比较简单 ...

  8. 微信小程序 - 非Form数据怎么发送到后端?

    通过设置异步缓存,就可以做到 wx.setStorageSync('imgs',imglist); 最后的提交信息:

  9. 微信小程序实现简单的2048

    这两天心血来潮,用微信小程序写了一个简单的2048,欢迎各位老铁围观,提出宝贵意见.这里我从0到1赘述一下个人实现流程: 首先去微信公平台(https://mp.weixin.qq.com/)注册一个 ...

随机推荐

  1. 基于 HTML5 + WebGL 的 3D 可视化挖掘机

    前言 在工业互联网以及物联网的影响下,人们对于机械的管理,机械的可视化,机械的操作可视化提出了更高的要求.如何在一个系统中完整的显示机械的运行情况,机械的运行轨迹,或者机械的机械动作显得尤为的重要,因 ...

  2. 五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链

    买买买结算系统 一年一度的双十一购物狂欢节就要到了,又到剁手党们开始表演的时刻了.当我们把种草很久的商品放入购物车以后,点击"结算"按钮时,就来到了买买买必不可少的结算页面了.让我 ...

  3. OptimalSolution(1)--递归和动态规划(4)其他问题

    一.汉诺塔问题(包括chapter 1中的汉诺塔问题) 二. 三. 四. 五. 六. 七. 八.

  4. Unity3D图像后处理特效——Depth of Field 3.4

    Depth of Field 3.4 is a common postprocessing effect that simulates the properties of a camera lens. ...

  5. vue设置页面标题

    使用vue-wechat-title插件对页面标题进行设置 1.安装模块    命令行窗口中运行npm install vue-wechat-title --save PS.如果程序正在运行,ctrl ...

  6. 基于node的前端组件包发布至nexus和npmjs

    目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 建立组件的导出模块... 1 2.2. 建立组件入口文件... 1 2.3. 配置“ng-package.json”文件.. ...

  7. Python实现自动化监控远程服务器

    最近发现Python课器做很多事情,在监控服务器有其独特的优势,耗费资源少,开发周期短. 首先我们做一个定时或者实时脚本timedtask.py,让其定时监控目标服务器,两种方式: 第一种: #!/u ...

  8. 2019年10月13日 linux习题 wangqingchao

    1. GUN的含义是: GNU's Not UNIX . 2. Linux一般有3个主要部分:内核.命令解释层.实用工具. 3.POSIX是可携式操作系统接口的缩写,重点在规范核心与应用程序之间的接口 ...

  9. php判断是不是https的方法

    php判断是不是https的方法<pre> public function is_https() { if (!empty($_SERVER['HTTPS']) && st ...

  10. Hibernate中关于Query返回查询结果是类名的问题

    query.list返回的是一个装有类的信息的集合,而不装有数据库信息的集合.如下图 运行结果为:   因为得到的集合是类,所以要将list泛型设为那个类,并且将得到的集合进行.get(x).getx ...