前端架构之小小node架构

栏目: 编程工具 · 发布时间: 5年前

内容简介:这次写个小小的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:存放测试文件

前端架构之小小node架构

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看一下效果了

前端架构之小小node架构

如果报错,请自行分析,或者接着往下走:

6.在dist中创建文件夹assets:存放静态文件, views:存放模板文件

请看上文app.js配置的文件

前端架构之小小node架构

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 前端架构之小小node架构

7.生成文档

//下载包
npm install -D jsdoc
复制代码

执行 npm run docs

前端架构之小小node架构

打开index.html,文档便生成了

前端架构之小小node架构

总结:

勉勉强强算是完成了吧,有点意思。

下次将更新一个大型项目的架构,后台:node,express,jtw;数据库:mysql,orm:sequlize;前端:webpack,vue+element UI,这个更是有点意思。


以上所述就是小编给大家介绍的《前端架构之小小node架构》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解Java虚拟机(第2版)

深入理解Java虚拟机(第2版)

周志明 / 机械工业出版社 / 2013-9-1 / 79.00元

《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》内容简介:第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK 1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干......一起来看看 《深入理解Java虚拟机(第2版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试