既然前端工程化是基于NodeJS,那么选择NodeJs做前后端分离部署也是理所应当的。其实只需要实现静态资源和代理的话,用nginx才是最好的选择,用NodeJS是为了日后能进一步在服务端上实现自动构建或服务端渲染。

同步到交流学习社区:https://www.mwcxs.top/page/438

一、目前只有前端的目录结构

小声说:小程序代码结构

二、创建一个简单后端服务器

在根目录下执行

npm init -y

npm init 用来初始化生成一个新的 package.json 文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。
如果使用了 -f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的 package.json 文

接下来执行

npm i koa koa-static http-proxy-middleware async koa-router koa-bodyparser koa-json mysql -s

第一个koa是基于NodeJS的服务器框架,

第二个koa-static是基于Koa的插件,我们需要用它建立静态资源服务器,

第三个http-proxy-middleware是用于做代理的插件。

有了这三个东西,我们就可以搭建出最简单的前端服务器了。

第四个async是用于异步操作

第五个koa-router是路由控制器,实现路由中间件

第六个koa-bodyparser是post提交数据中间件

第七个koa-json是get提交数据的中间件

第八个mysql是数据库中间件

-s 使用 --save 安装的插件,责被写入到 dependencies 对象里面去,dependencies  是需要发布到生产环境的

三、配置

项目根目录下会多出一个package.json,一个package-lock.json,一个node_modules,我们不用管这三个,而是在根目录下建立一个api文件夹,作为后端服务接口。

1、在api文件夹下新建一个app.js和mysql.js.

app.js内容如下

const Koa = require('koa');
const koaJson = require('koa-json');
const bodyParser = require('koa-bodyparser');
const path = require('path');
const http = require('http');
const fs = require('fs');
const async = require('async');
const query = require('./mysql.js'); const app = new Koa(); app.use(bodyParser());
app.use(koaJson()); app.use(async (ctx, next) => {
ctx.execSql = query;
await next();
}); // routes
fs.readdirSync(path.join(__dirname, 'routes')).forEach(function (file) {
if (~file.indexOf('.js')) app.use(require(path.join(__dirname, 'routes', file)).routes());
}); app.use(function (ctx, next) {
ctx.redirect('/404.html');
}); app.on('error', (error, ctx) => {
console.log('something error ' + JSON.stringify(ctx.onerror))
ctx.redirect('/500.html');
}); http.createServer(app.callback())
.listen(8090)
.on('listening', function () {
console.log('server listening on: ' + 8090)
});

mysql.js内容如下

const mysql = require('mysql');

const pool = mysql.createPool({
host: '127.0.0.1',
user: 'root',
password: '123456',
database: 'wx_contacts',
connectionLimit: 10
}) let query = function (sql, values) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
return reject(err);
} else {
connection.query(sql, values, (err, rows) => {
connection.release();
if (err) {
return reject(err)
} else {
return resolve(rows);
}
})
}
})
})
} module.exports = query;

2、在api文件夹下新建一个routes文件夹,文件夹下建立index.js

存放路由配置,index.js内容如下

const router =  require('koa-router')();
const contact = require('../contact/index.js'); router.use('/contact', contact.routes(), contact.allowedMethods()); module.exports = router;

3、在api文件夹下新建一个contact文件夹,文件夹下建立index.js和contoller.js

index.js内容如下

const router = require('koa-router')();
const controller = require('./controller.js'); router.post('/login', controller.Login); module.exports = router;

contoller.js内容如下

主要是接口调用的

/*
* 登录
*/
exports.Login = async(ctx) => {
let phone = ctx.request.body.phone || '';
let psd = ctx.request.body.password || '';
if (!phone || !psd) {
ctx.body = {
success: false,
message: '手机号码或密码不能为空'
};
return false;
}
try {
let result = await ctx.execSql(`select * from contact_user where phone = ? and password = ?`, [phone, psd]);
if (result.length > 0) {
ctx.body = {
success: true,
userID: result[0].id,
message: ''
};
} else {
ctx.body = {
success: false,
userID: 0,
message: '账号或密码错误'
};
}
} catch (err) {
ctx.body = {
success: false,
userID: 0,
message: err
};
}
}

四、运行

运行

node api/app.js

运行起来后,直接关掉终端即可,切不可Ctrl + C退出,否则服务又会停掉。

此时的项目结构

快速新建简单的koa2后端服务的更多相关文章

  1. [转]快速新建简单的koa2后端服务

    本文转自:https://blog.csdn.net/saucxs/article/details/83788259 既然前端工程化是基于NodeJS,那么选择NodeJs做前后端分离部署也是理所应当 ...

  2. Java语言快速实现简单MQ消息队列服务

    目录 MQ基础回顾 主要角色 自定义协议 流程顺序 项目构建流程 具体使用流程 代码演示 消息处理中心 Broker 消息处理中心服务 BrokerServer 客户端 MqClient 测试MQ 小 ...

  3. 微信后端服务架构及其过载控制系统DAGOR

    微信架构介绍   眼下的微信后端包含3000多个移动服务,包括即时消息.社交网络.移动支付和第三方授权.该平台每天收到的外部请求在10 ^10个至10^11个.每个这样的请求都会触发多得多的内部微服务 ...

  4. 微信小程序 + thinkjs + mongoDB 实现简单的前后端交互

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

  5. 拿nodejs快速搭建简单Oauth认证和restful API server攻略

    拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...

  6. Apple使用Apache Mesos重建Siri后端服务

    苹果公司宣布,将使用开源的集群管理软件Apache Mesos,作为该公司广受欢迎的.基于iOS的智能个人助理软件Siri的后端服务.Mesosphere的博客指出,苹果已经创建了一个命名为J.A.R ...

  7. 容易被忽视的后端服务 chunked 性能问题

    容易被忽视的后端服务 chunked 性能问题 标签(空格分隔): springboot springmvc chunked 背景 spring boot 创建的默认 spring mvc 项目 集成 ...

  8. vue,vuex的后台管理项目架子structure-admin,后端服务nodejs

    之前写过一篇vue初始化项目,构建vuex的后台管理项目架子,这个structure-admin-web所拥有的功能 接下来,针对structure-admin-web的不足,进行了补充,开发了具有登 ...

  9. koa2源码解读及实现一个简单的koa2框架

    阅读目录 一:封装node http server. 创建koa类构造函数. 二:构造request.response.及 context 对象. 三:中间件机制的实现. 四:错误捕获和错误处理. k ...

随机推荐

  1. python之@property

    在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 这显然不合逻辑.为了限制score的 ...

  2. JSON数据格式转换

    json格式 (JavaScipt Object Notation):是一种数据交换格式!json语法规则:01.对象表现形式 key:value 键值对02.如果有多个数据,之间使用逗号隔开 k1: ...

  3. USACO JAN14 奶牛冰壶运动 凸包+判定

    满足条件的一定是在凸包内的,直接判断 恬不知耻的加了特判,2333 #include<cstdio> #include<iostream> #include<cstrin ...

  4. BZOJ_3626_[LNOI2014]LCA_离线+树剖

    BZOJ_3626_[LNOI2014]LCA_离线+树剖 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度, ...

  5. I春秋——Misc(贝斯家族)

    不好意思呀!最近一直忙着学习python,竟然忘记更新I春秋里面的题目了(QAQ),我以后会时时刻刻提醒自己要更新 永远爱你们的! ----新宝宝 1:贝斯家族: 解题思路:我相信看见这一题都能够想到 ...

  6. Centos6.4 + mysql-5.6.38-linux-glibc2.12-x86_64.tar 实现mysql主从复制

    mysql安装方法:http://www.cnblogs.com/lin3615/p/4376224.html 用到的是两台服务器 主:192.168.1.106 从:192.168.1.69 1.在 ...

  7. Vue-CLI和脚手架

    但我们学习Vue时,很多教程都会说到用Vue-CLI构建项目,那么什么是脚手架?什么是Vue-CLI?为什么要用脚手架,好处在哪?以及为何我们用Vue开发项目时要用到Vue-CLI? 首先,CLI为c ...

  8. set的便捷操作

    认识集合 由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素有三个特征: 1.确定性(集合中的元素必须是确定的) 2.互异性(集合中的元素互不相同.例如:集合A={1,a},则a不能等于1) ...

  9. 循环神经网络之LSTM和GRU

    看了一些LSTM的博客,都推荐看colah写的博客<Understanding LSTM Networks> 来学习LSTM,我也找来看了,写得还是比较好懂的,它把LSTM的工作流程从输入 ...

  10. 【工具篇】Selenium 学习实践(一)环境搭建

    一.环境搭建 (1)初学者最佳环境: Python 2.7 + Selenium 2+ Firefox 46 (2)喜欢尝新的环境: Python 3.6 + Selenium 3+ Firefox ...