快速新建简单的koa2后端服务

前端之家收集整理的这篇文章主要介绍了快速新建简单的koa2后端服务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

同步到交流学习社区:

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

小声说:小程序代码结构

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

在根目录下执行

npm init 用来初始化生成一个新的 package.json 文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。如果使用了 -f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的 package.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'= require('koa-json'= require('koa-bodyparser'= require('path'= require('http'= require('fs'= require('async'= require('./MysqL.js'const app = <span style="color: #0000ff;">new<span style="color: #000000;"> Koa();

app.use(bodyParser());
app.use(koaJson());

app.use(async (ctx,next) =><span style="color: #000000;"> {
ctx.execsql =<span style="color: #000000;"> query;
await next();
});

<span style="color: #008000;">//<span style="color: #008000;"> routes
fs.readdirSync(path.join(dirname,'routes')).forEach(<span style="color: #0000ff;">function<span style="color: #000000;"> (file) {
<span style="color: #0000ff;">if (~file.indexOf('.js')) app.use(require(path.join(
dirname,'routes'<span style="color: #000000;">,file)).routes());
});

app.use(<span style="color: #0000ff;">function<span style="color: #000000;"> (ctx,next) {
ctx.redirect('/404.html'<span style="color: #000000;">);
});

app.on('error',(error,ctx) =><span style="color: #000000;"> {
console.log('something error ' +<span style="color: #000000;"> JSON.stringify(ctx.onerror))
ctx.redirect('/500.html'<span style="color: #000000;">);
});

http.createServer(app.callback())
.listen(8090<span style="color: #000000;">)
.on('listening',<span style="color: #0000ff;">function<span style="color: #000000;"> () {
console.log('server listening on: ' + 8090<span style="color: #000000;">)
});

MysqL.js内容如下

const MysqL = require('MysqL'const pool =<span style="color: #000000;"> MysqL.createPool({
host: '127.0.0.1'<span style="color: #000000;">,user: 'root'<span style="color: #000000;">,password: '123456'<span style="color: #000000;">,database: 'wx_contacts'<span style="color: #000000;">,connectionLimit: 10<span style="color: #000000;">
})

let query = <span style="color: #0000ff;">function<span style="color: #000000;"> (sql,values) {
<span style="color: #0000ff;">return <span style="color: #0000ff;">new Promise((resolve,reject) =><span style="color: #000000;"> {
pool.getConnection(<span style="color: #0000ff;">function<span style="color: #000000;"> (err,connection) {
<span style="color: #0000ff;">if<span style="color: #000000;"> (err) {
<span style="color: #0000ff;">return<span style="color: #000000;"> reject(err);
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
connection.query(sql,values,(err,rows) =><span style="color: #000000;"> {
connection.release();
<span style="color: #0000ff;">if<span style="color: #000000;"> (err) {
<span style="color: #0000ff;">return<span style="color: #000000;"> reject(err)
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
<span style="color: #0000ff;">return<span style="color: #000000;"> resolve(rows);
}
})
}
})
})
}

module.exports = query;

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

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

const router = require('koa-router'= require('../contact/index.js'router.use('/contact'<span style="color: #000000;">,contact.routes(),contact.allowedMethods());

module.exports = router;

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

index.js内容如下

const router = require('koa-router'= require('./controller.js'router.post('/login'<span style="color: #000000;">,controller.Login);

module.exports = router;

contoller.js内容如下

主要是接口调用

登录 = async(ctx) =>= ctx.request.body.phone || ''= ctx.request.body.password || '' (!phone || !='手机号码或密码不能为空' = await ctx.execsql(`select * from contact_user where phone = ? and password = ? (result.length > 0=0''=0'账号或密码错误'=

四、运行

运行

node api/app.js

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

此时的项目结构

猜你在找的Node.js相关文章