内容简介:这次写个小小的node server架构,用到koa+swig,gulp,jsdocs生成文档,也没有多少内容权当记录下来吧,为接下来的没有什么好说的,直接创建文件夹便行,dist:自动生成,docs:存放生成文档,config:存放配置文件,controllers:控制路由,models:负责数据交互,web:暂时没用到,tests:存放测试文件
前言:
这次写个小小的node server架构,用到koa+swig,gulp,jsdocs生成文档,也没有多少内容权当记录下来吧,为接下来的 大型项目架构 准备一下。 附上GitHub地址
1.项目目录
没有什么好说的,直接创建文件夹便行,dist:自动生成,docs:存放生成文档,config:存放配置文件,controllers:控制路由,models:负责数据交互,web:暂时没用到,tests:存放测试文件
2.编写gulpfile.js
先创建文件gulpfile.js,实现编译,监听文件变化自动编译
//安装包 npm install -D gulp gulp-babel gulp-watch //编译es6 npm install -D babel-plugin-transform-es2015-modules-commonjs babel-core //安装 cross-env 能跨平台地设置及使用环境变量 npm install -D cross-env复制代码
const gulp = require('gulp') const babel = require('gulp-babel') const watch = require('gulp-watch'); // 生产环境 gulp.task('buliddev', () => { return watch('./src/nodeuii/**/*.js',//监听src/nodeuii所有的js { ignoreInitial: false }, () => { gulp.src('./src/nodeuii/**/*.js')//编译此文件 .pipe(babel({ babelrc: false, "plugins": ["transform-es2015-modules-commonjs"] })) .pipe(gulp.dest('dist'));//输出到dist中 }) }); let _task = ['buliddev'] if(process.env.NODE_ENV == 'production') { _task = []; } gulp.task('default', _task)复制代码
3.编写config>index.js
//安装包 lodash npm install -s lodash复制代码
import _ from 'lodash' import path from 'path' //静态路径,待会用到 let config = { 'viewDir': path.join(__dirname, '../views'), 'staticDir': path.join(__dirname, '../assets') } //初始化,判断开发环境还是生产环境 const init = () => { if(process.env.NODE_ENV == 'development'){ const localConfig = { port:8081 } config = _.extend(config, localConfig) } if(process.env.NODE_ENV == 'production'){ const localConfig = { port:80 } config = _.extend(config, localConfig) } return config } const result = init() export default result复制代码
4.配置package.json,用supervisor启动node
//安装supervisor npm install -D supervisor 复制代码
"scripts": { "test": "", "server:bulid": "gulp", "start": "pm2 start", "bulid": "", "docs": "jsdoc ./src/nodeuii/**/*.js -d ./docs/jsdocs", "start:dev": "cross-env NODE_ENV=development supervisor ./dist/app.js" },复制代码
5.编写app.js
//先装包 npm install -s koa kao-simple-router koa-swig koa-static 复制代码
import Koa from 'koa' import router from 'koa-simple-router' import render from 'koa-swig' import serve from 'koa-static' import co from 'co' import config from './config' import controllerInit from './controllers' const app = new Koa() //配置模板路径 app.context.render = co.wrap(render({ root:config.viewDir, autoescape: true, cache: 'memory', ext: 'html', varControls: ["[[","]]"],//更改数据模板样式本来是{{}} writeBody: false })); controllerInit(app, router) // 配置静态路径 app.use(serve(config.staticDir)) console.log(config) app.listen(config.port, () => { console.log(`success listening on ${config.port}`) })复制代码
编写controllers里面的index.js IndexController.js
index.js
import IndexController from './IndexController' const indexController = new IndexController() //路由的集成中心 export default (app, router) => { app.use(router(_ => { _.get('/', indexController.indexHome()), _.get('/', indexController.indexAction()) })) }复制代码
IndexController.js
import IndexModel from '../models/IndexModel' class IndexController { constructor(){} indexHome(){ return async (ctx, next) => { ctx.body = '第一次node server架构, 有点意思' } } indexAction(){ return async (ctx, next) => { const IndexModelIns = new IndexModel() const result = await IndexModelIns.getData() ctx.body = await ctx.render('index',{ data: result }); } } } export default IndexController复制代码
编写models里的IndexModel.js
/** *@fileOverview 实现Index数据模型 * @author chen */ /** *IndexModle类 生成一段异步数据 * @class */ export default class IndexModel { /** *@constructor * @example{string} app koa2上下文 */ constructor(app){} /** * 获取具体数据api接口 * @return {Promise} 返回异步数据 * @example * return new Promise * getData() */ getData(){ return new Promise((resolve, reject) => { setTimeout(function () { resolve('异步数据') }, 1000) }) } }复制代码
写到这里,大家可以运行一下 npm run start:dev
访问127.0.0.1:8081看一下效果了
如果报错,请自行分析,或者接着往下走:
6.在dist中创建文件夹assets:存放静态文件, views:存放模板文件
请看上文app.js配置的文件
css>index.css
:root{ --mainColor:#6B4C99; } body{ background: var(--mainColor); }复制代码
js>index.js
console.log(111)复制代码
views>index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/css/index.css"> </head> <body> <div id="app"> <h1>[[data]]</h1> 有点意思!!!接下来.... <input type="text" v-model="data"> {{data}} </div> </body> <script src="/js/index.js"></script> <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.min.js"></script> <script> var app = new Vue({ el: '#app', data: { data: '有点意思!!!!' } }) </script> </html>复制代码
不单只可以使用swig模板,还可以使用vue。
访问 http://127.0.0.1:8081/index
7.生成文档
//下载包 npm install -D jsdoc 复制代码
执行 npm run docs
打开index.html,文档便生成了
总结:
勉勉强强算是完成了吧,有点意思。
下次将更新一个大型项目的架构,后台:node,express,jtw;数据库:mysql,orm:sequlize;前端:webpack,vue+element UI,这个更是有点意思。
以上所述就是小编给大家介绍的《前端架构之小小node架构》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Impractical Python Projects
Lee Vaughan / No Starch Press / 2018-11 / USD 29.95
Impractical Python Projects picks up where the complete beginner books leave off, expanding on existing concepts and introducing new tools that you’ll use every day. And to keep things interesting, ea......一起来看看 《Impractical Python Projects》 这本书的介绍吧!