NodeJs服务器布置篇,记小白的叁次基于vue

By admin in 4858美高梅 on 2019年3月31日

=====================================================================

第叁,放上项目github地址:

首先,放上项目github地址:

记小白的3次基于vue+express+mongodb个人站开发,vuemongodb

  学了vue和node一段时间了,折腾了有的零零散散的小东西。立时大四了要出来找工作了,所以已经想搭1个个人站作为2遍相比较完美的总计。因为没有安顿功底,界面设计使本身那种恐怖症伤者苦不堪言。辛亏到结尾花了两个礼拜,慢慢磨如故做出来能看的。本小说也只是记录一下小白的学习记录,然后希望大佬举办指教。好了,开始正题吧。

  一:先放在线预览地址吧(

    github:

    预览图:

        4858美高梅 1

                             
 4858美高梅 2

 

     二:技术栈:

    vue vue-router

    axios 

    express

    mongoose

  三.项目结构:

      前端项目结构: static中存放静态财富        apis后端项目布局

4858美高梅 3         
           
  4858美高梅 4

  四:环境搭建

    .首先用安装vue-cli ,安装项目模版,进入项目安装正视

    npm install -g  vue-cli
    vue init webpack project-name
    cd project
    npm install
    npm run dev 

  当您看到vue页面自动打开并显示她的图标时,页面算是搭建成功了

  五:开端编制前端项目

   1.在App.vue里建好页面结构,在头顶建立好路由标签,这几个在vue文书档案中有很详细的牵线,并将零件渲染到中等content中

  <div id="app">
     <div class="container">
      <div class="header">
       <h1 class="logoname">ZIming</h1>
       <ul>        
        <li><router-link to='/contact'>联系我</router-link></li>
        <li><router-link to='/article'>个人介绍</router-link></li>
        <li><router-link to='/project'>项目展示</router-link></li>
        <li><router-link to='/person'>图片欣赏</router-link></li>
        <li><router-link to='/home'>主页</router-link></li>
       </ul>
      </div>
      <div class="content clear">
       <router-view></router-view>
      </div>
      <div class="footer"></div>

    <img src="/static/imgs/music-fly.png" alt="4858美高梅 5" class="img-responsive">
    <audio :src="src" autoplay="autoplay" id="audio"></audio>

     </div>
  </div>

  

   2.布局路由:这些项目模版已经创立好了(若是您在创制项指标时候点了vue-router
yes的话),所以大家只须要布署

     src下的router下的index.js

import Vue from 'vue'
import Router from 'vue-router'
import home from '../components/home'
import project from '../components/project'
import article from '../components/article'
import person from '../components/person'
import contact from '../components/contact'


Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/home',
      name: 'home',
      component: home
    },
    {
      path: '/person',
      name: 'person',
      component: person
    },
        {
      path: '/article',
      name: 'article',
      component: article
    },
        {
      path: '/project',
      name: 'project',
      component: project
    },
        {
      path: '/contact',
      name: 'contact',
      component: contact
    },
    {
        path:'/*',
        redirect:'/home'
    }
  ]
})

 

最后二个重定向网页到home,方便打开时展现

3.编写5个组件

  那里的也没怎么越发的,可能有2个零部件之间的通讯难点,作者本身的做的相比较简单没在用到vuex。可是在此之前蒙受过坑,所以了笔录一下。

    1.父子组件通讯

    子组件动态获取父组件数据

<input v-model="sendmessage"> 
<child :receive="sendmessage"></child>
{
  props:['receive']
}

      2.非父子组件通讯

    为了利用vue的 $emit() 和 $on() 事件,得先创立一个Vue实例 

    var bus = new Vue() //通常情况下

 

    此项目中出于创造的实例没有名称,大家再一次创造二个Bus实例,并将他注入到根组件App下,便于其余组件都能访问到

  main.js    

    new Vue({
    el: ‘#app’,
      store,
    router,
    template: ‘<App/>’,
    components: { App },
    data:{
    Bus:new Vue()
    }
NodeJs服务器布置篇,记小白的叁次基于vue。    })

  然后发送 通过this.$root.Bus访问到根组件的实例,将它看作载体传送数据

        //发送 数据 
     this.$root.Bus.$emit('showing',this.b);
     //接受 
     this.$root.Bus.$on('showing', (data)=>{
              this.pic=data.pic;
              this.name=data.name;
              this.author=data.author;
              this.src=data.src;
         }
    

 

   至此半数以上零部件通讯能化解了,涉及到复杂的话,那就要运用vuex了,那里就不再谈了。

  4.axios 发送异步请求,获取数据

   1.先安装

   cnpm i axios -D

 

   在main.js中 import
axios,然后悲催的意识在此外组件中不只怕接纳,而它也不协助Vue.use().gg..。一顿疯狂百度之后发现了简约的消除方案:改写原型链,为Vue实例的原型添加axios属性 

    Vue.prototype.$axios = axios

   其余零件调用

     this.$axios({});

   2.好了,欢愉的化解了选择难点。然后在App.vue中提倡了第三个ajax请求,那是伸手动和自动己写好的后台的贰个api。

            this.$axios.post('http://www.guoaihua.com:3000/users/saveInfo',{
                ip:returnCitySN.cip,
                adress:returnCitySN.cname,
                time:new Date()
            }).then(function (res) {
                console.log(res);
            })

 

    很倒霉再次回到了一串英文,禁止跨域访问。

    想到CROS,就跑到服务器上给服务端的express中加了一个头顶

app.all('*',function (req,res,next) {
    res.header("Access-Control-Allow-Origin","*");
    res.header("Access-Control-Allow-Headers","Content-Type");
    next();
});

     然则,事情屡屡并不是那么简单的就谢世了。当自家调用1个天涯论坛查询api时,同样重临了禁止跨域访问。笔者去。。开玩笑吗,小编总无法去改它服务器吧。那。。那本人就用webpack的proxy吧。在config下的index.js中找到了proxyTable

'/cityjson': {
              target: 'http://pv.sohu.com',
         pathRewrite: {'^/cityjson' : '/cityjson'}, 
         changeOrigin: true }

 

    好,贼溜。好玩的事的最终是上线的时候发现包裹后安顿到相当,它只适用与开发环境。崩溃了。。。。

    冷静一大下,想起来了跨域还有贰个“”神奇的事物” script标签
,作者去那些好,格外喜欢的在html.index加上了。

<script src="http://pv.sohu.com/cityjson"></script>

 

   5.这个东西搞完之后,页面也就大多了,至于样式布局啥的就不写了。

  六.发端撸后端代码了

  1. 首先惯例,成立项目模版 

npm install express-generator -g  // 这要管理员权限
express project               // 创建项目
npm i
npm start   //ok

 

   2.以此模版路由什么的已经写好了,进去配置就ok

    此前有二个音乐得到的api
: 

    这些001是足以变动的,对应分裂的歌曲,所以那边运用了路由参数,那些:id及对应001,获取参数须求中间件bodyParser解析

router.use(bodyParser.urlencoded({extended: false}));
router.use(bodyParser.json());

 

    然后在路由中,用req.param.id获取。那样就制止了写过多个。因为那些是要回到music的,所以用了sendFile();并经过path将当前目录映射到了musics

router.get('/:id', function(req, res, next) {
  res.sendFile(path.join(__dirname,'../musics',req.params.id+'.mp3'));
});

 

  3.mongodb ,在express框架中用mongoose模块来决定mongodb

Schema
: 一种以文件方式储存的数据库模型骨架,不具有数据库的操作能力  
    Model
Schema宣布生成的模型,具有抽象属性和作为的数据库操作对
Entity : 由Model制造的实体,他的操作也会影响数据库

   mongodb的装置就不说了。安装mongoose

 cnpm i mongoose -D

 

   编写配置文件 mongoose.js

var mongoose=require('mongoose');
var db=mongoose.connect('mongodb://localhost/test');

var DataSchema=new mongoose.Schema({
    ip:{type:String},
    adress:{type:String},
    time:{type:Date,default:Date.now}
});

var MesSchema=new mongoose.Schema({
    name:{type:String},
    qq:{type:Number},
    email:{type:String},
    phone:{type:Number},
    message:{type:String},
    time:{type:Date,default:Date.now}
});

mongoose.model('usersInfo',DataSchema);
mongoose.model('mesInfo',MesSchema);

 

   首先创设Schema collections  约等于mysql中的表

   然后用mongoose将Schema发布为model

  调用,先通过mongoose.model获取到公布的model,再利用这些model创制多少个实例,最终save。

      var usersModel=mongoose.model('usersInfo');
      var data=new usersModel({
          ip:req.body.ip,
          adress:req.body.adress,
          time:req.body.time
      });

      data.save(function(err){
          console.log(err);
      });

 

 七.将项目配置到服务端

  首先打包前端项目

  npm run build

 

   然后将dist拷贝到了服务端新建的三个express项目中,并在它下边加上了,并npm
start 开启

  app.use(express.static(path.join(__dirname,
 'dist')));

 

   后端代码就不管了,不想改很多api接口,所以一直扔到服务端上。在打开那几个前面要先开辟服务端的mongodb,然后node
./bin/www

  好,至此二个完全的在此以前端界面设计到后端的数据库项目都解决了,页面也相当越快的跑起来了。哈哈哈,但是,还有许多工作去做,质量优化,安全吗的…..

八.结语

  哈哈,写的有点杂乱无章的,以后都以看大神们的稿子学习,前天感动了,小白自身动了一回手。没啥技术可言,正是将团结踩的一部分坑记录了下来,方便未来纪念,借使能给任何小伙伴哪怕一丢丢帮手,作者就很笑容可掬了0.0.末尾项目在github上有发表,求顺手star一下(立时大四了,要找工作了想着能有点用)  

学了vue和node一段时间了,折腾了有的零零散散的小东西。立刻大四了要出去找工作了…

*监察和控制系统预览地址:* 预览地址

一、前言

从前学的java,一直用的ssm框架写后台。前段时间接触到node.js,于是花了二日时间学了一晃node.js并写了一个CRUD不难示例。由于后日一直学用github
pages搭建博客,一贯没时间写README,前日有空补了上去。

下边来内容自于项目标README。

一、前言

事先学的java,一贯用的ssm框架写后台。前段时直接触到node.js,于是花了两天时间学了一晃node.js并写了一个CRUD简单示例。由于后日一向学用github
pages搭建博客,平素没时间写README,先天有空补了上去。

上边来内容自于项指标README。

=====================================================================

二 、项目介绍

4858美高梅,据他们说node.js + express + mysql达成的restful风格的CRUD简单示例

二 、项目介绍

据悉node.js + express + mysql实现的restful风格的CRUD简单示例

  JS错误音讯已经有艺术搜集了,那么什么样存下来,如何分析出来有价值的数目,那都亟需重视后台代码的法力了

2.1 组织结构

├── app.js -- 应用配置
├── bin
│   └── www -- 项目运行脚本
├── conf 
│   └── mysqlConf.js -- mysql配置文件
├── dao
│   ├── userDAO.js -- 封装和数据库的交互
│   └── userSqlMap.js -- SQL语句封装
├── model
│   └── result.js -- 返回结果对象封装
├── package.json -- 依赖模块
├── project-datamodel
│   └── user.sql -- 数据库脚本
├── public -- 前端静态页面
│   ├── add.html
│   ├── css
│   │   └── style.css
│   ├── detail.html
│   ├── index.html
│   └── modify.html
└── routes
    └── users.js -- 用户操作路由及业务逻辑

2.1 协会结构

├── app.js -- 应用配置
├── bin
│   └── www -- 项目运行脚本
├── conf 
│   └── mysqlConf.js -- mysql配置文件
├── dao
│   ├── userDAO.js -- 封装和数据库的交互
│   └── userSqlMap.js -- SQL语句封装
├── model
│   └── result.js -- 返回结果对象封装
├── package.json -- 依赖模块
├── project-datamodel
│   └── user.sql -- 数据库脚本
├── public -- 前端静态页面
│   ├── add.html
│   ├── css
│   │   └── style.css
│   ├── detail.html
│   ├── index.html
│   └── modify.html
└── routes
    └── users.js -- 用户操作路由及业务逻辑

  作为前端工程师,首要选用NodeJs作为后台语言,MySQL数据库,Koa2用作框架,为了分析出有用的结果,必要进行七个sql的查询,那个时候async/await就起了相当大遵守。最要紧的正是那多少个工具技术,其实自身一度将代码放到GitHub上了,这一章讲起来,感觉有个别多余了,因为看代码更易于了解里面是怎么回事,就简单的牵线一下用法。

2.2 模块依赖

www -> app.js -> users.js ->  userDAO.js -> mysqlConf.js & userSqlMap.js

2.2 模块看重

www -> app.js -> users.js ->  userDAO.js -> mysqlConf.js & userSqlMap.js

  壹 、目录结构

2.3 技术选型

后端技术

  • node.js
  • express

前者技术

  • angular.js

2.3 技术选型

后端技术

  • node.js
  • express

前者技术

  • angular.js

  2个品类前景是否能够卓越拓展,项目结构自然要搭建好,便于梳理逻辑。如图:

三 、环境搭建

  • node.js:
  • mysql:

叁 、环境搭建

  • node.js:
  • mysql:

   4858美高梅 6

④ 、项目运作

  1. 下载代码并配备

git clone https://github.com/codethereforam/express-mysql-demo.git
cd express-mysql-demo && npm install   #安装部署依赖的包
  1. 新建express-mysql-demo数据库,导入project-datamodel文件夹下的user.sql

  2. 修改conf/mysqlConf.js中数据库配置消息

  3. 启动

# 切换到项目根路径
npm start
  1. 开辟首页:

肆 、项目周转

  1. 下载代码并配备

git clone https://github.com/codethereforam/express-mysql-demo.git
cd express-mysql-demo && npm install   #安装部署依赖的包
  1. 新建express-mysql-demo数据库,导入project-datamodel文件夹下的user.sql

  2. 修改conf/mysqlConf.js中数据库配置消息

  3. 启动

# 切换到项目根路径
npm start
  1. 开拓首页:

  /bin :布署相关(本地,测试,生产条件)

五 、开发进程及代码分析

至于restful,可参看阮一峰的两篇小说:

  • 理解RESTful架构
  • RESTful API
    设计指南

自个儿利用的IDE是IDEA,安装”NodeJS”插件后逐一点击

File -> New Project -> Node.js and NPM -> Node.js Express App

IDEA私下认可使用express-generator生成项目组织。

新建数据库”express-mysql-demo”:

create database `express-mysql-demo`;

新建user表:

CREATE TABLE `express-mysql-demo`.`user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8mb4;

表结构:

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(45)      | NO   |     | NULL    |                |
| password | varchar(45)      | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

mysql配置文件conf/mysqlConf.js:

module.exports = {
    mysql: {
        host: 'localhost',
        user: 'root',
        password: '',
        database:'express-mysql-demo',
        // 最大连接数,默认为10
        connectionLimit: 10
    }
};

SQL语句封装模块dao/userSqlMap.js:

var userSqlMap = {
    add: 'insert into user(username, password) values(?, ?)',
    deleteById: 'delete from user where id = ?',
    update: 'update user set username=?, password=? where id=?',
    list: 'select * from user',
    getById: 'select * from user where id = ?'
};

打包再次回到结果对象model/result.js:

exports.createResult = function(success, data) {
    var result = {};
    result.success = success;
    result.data = data;
    return result;
};

笔者那里运用了工厂方法创设结果对象,对象有四个脾气,success代表用户操作成功或战败,data存放后台要赶回的数码。

下边分析修改用户部分音讯的有关代码,全体的增加和删除改查代码请将品种clone下来翻看。

包装和数据库的互动模块dao/userDAO.js:

var pool = mysql.createPool(mysqlConf.mysql);
module.exports = {
     getById: function (id, callback) {
        pool.query(userSqlMap.getById, id, function (error, result) {
            if (error) throw error;
            console.log(result[0]);
            callback(result[0]);
        });
    },update: function (user, callback) {
        pool.query(userSqlMap.update, [user.username, user.password, user.id], function (error, result) {
            if (error) throw error;
            callback(result.affectedRows > 0);
        });
    }
};

那里运用了连接池,重复使用数据库连接,而不必每执行二回CRUD操作就得到、释放三遍数据库连接,从而增强了对数据库操作的属性。

用户操作路由及实现业务逻辑routes/users.js:

/* patch users */
router.patch('/:id', function (req, res) {
    console.log('patch users called');
    userDAO.getById(req.params.id, function (user) {
        var username = req.body.username;
        if(username) {
            user.username = username;
        }
        var password = req.body.password;
        if(password) {
            user.password = password;
        }
        console.log(user);
        userDAO.update(user, function (success) {
            var r =  result.createResult(success, null);
            res.json(r);
        });
    });
});

router依据分裂的HTTP请求方法和做客路径执行相应的回调函数,回调函数中先记下日志,然后检查用户传过来的数据,接着调用userDAO的附和CRUD方法,最终回到2个JSON对象给前端。那里修改用户部分音讯对应HTTP方法是PATCH,而修改总体音讯对应的是PUT。

应用配置app.js中安顿用户操作相关的路由:

app.use('/users', users);

前端public/index.html中与后台交互的JS代码:

(function (window) {
            window.angular.module('list', [])
                .controller('listCtrl', function ($scope, $http) {                
                    $scope.doPatch = function (id) {
                        var data = JSON.stringify({
                            password: document.getElementById("pwd" + id).value
                        });
                        $http.patch("/users/" + id, data)
                            .then(function (response) {
                                console.debug(response.data.success);
                            }, function (err) {
                                alert(err);
                            });
                    };
                });
        })(window);

前者采纳angualr.js,ajax异步调用后端restful
API,然后解析后台再次来到的JSON对象在界面上显得。

伍 、开发进程及代码分析

至于restful,可参考阮一峰的两篇小说:

  • 理解RESTful架构
  • RESTful API
    设计指南

自家使用的IDE是IDEA,安装”NodeJS”插件后各样点击

File -> New Project -> Node.js and NPM -> Node.js Express App

IDEA暗许使用express-generator生成项目结构。

新建数据库”express-mysql-demo”:

create database `express-mysql-demo`;

新建user表:

CREATE TABLE `express-mysql-demo`.`user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8mb4;

表结构:

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| username | varchar(45)      | NO   |     | NULL    |                |
| password | varchar(45)      | NO   |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

mysql配置文件conf/mysqlConf.js:

module.exports = {
    mysql: {
        host: 'localhost',
        user: 'root',
        password: '',
        database:'express-mysql-demo',
        // 最大连接数,默认为10
        connectionLimit: 10
    }
};

SQL语句封装模块dao/userSqlMap.js:

var userSqlMap = {
    add: 'insert into user(username, password) values(?, ?)',
    deleteById: 'delete from user where id = ?',
    update: 'update user set username=?, password=? where id=?',
    list: 'select * from user',
    getById: 'select * from user where id = ?'
};

包装重返结果对象model/result.js:

exports.createResult = function(success, data) {
    var result = {};
    result.success = success;
    result.data = data;
    return result;
};

本人那边运用了工厂方法创立结果对象,对象有两本性子,success代表用户操作成功或破产,data存放后台要赶回的多少。

上边分析修改用户部分消息的有关代码,全体的增加和删除改查代码请将品种clone下来翻看。

包裹和数据库的竞相模块dao/userDAO.js:

var pool = mysql.createPool(mysqlConf.mysql);
module.exports = {
     getById: function (id, callback) {
        pool.query(userSqlMap.getById, id, function (error, result) {
            if (error) throw error;
            console.log(result[0]);
            callback(result[0]);
        });
    },update: function (user, callback) {
        pool.query(userSqlMap.update, [user.username, user.password, user.id], function (error, result) {
            if (error) throw error;
            callback(result.affectedRows > 0);
        });
    }
};

此处运用了连接池,重复使用数据库连接,而毋庸每执行1次CRUD操作就得到、释放1次数据库连接,从而增强了对数据库操作的特性。

用户操作路由及贯彻业务逻辑routes/users.js:

/* patch users */
router.patch('/:id', function (req, res) {
    console.log('patch users called');
    userDAO.getById(req.params.id, function (user) {
        var username = req.body.username;
        if(username) {
            user.username = username;
        }
        var password = req.body.password;
        if(password) {
            user.password = password;
        }
        console.log(user);
        userDAO.update(user, function (success) {
            var r =  result.createResult(success, null);
            res.json(r);
        });
    });
});

router依照分歧的HTTP请求方法和访问路径执行相应的回调函数,回调函数中先记下日志,然后检查用户传过来的数量,接着调用userDAO的照应CRUD方法,最后回到2个JSON对象给前端。那里修改用户部分信息对应HTTP方法是PATCH,而修改总体消息对应的是PUT。

应用配置app.js中布置用户操作相关的路由:

app.use('/users', users);

前者public/index.html中与后台交互的JS代码:

(function (window) {
            window.angular.module('list', [])
                .controller('listCtrl', function ($scope, $http) {                
                    $scope.doPatch = function (id) {
                        var data = JSON.stringify({
                            password: document.getElementById("pwd" + id).value
                        });
                        $http.patch("/users/" + id, data)
                            .then(function (response) {
                                console.debug(response.data.success);
                            }, function (err) {
                                alert(err);
                            });
                    };
                });
        })(window);

前端采取angualr.js,ajax异步调用后端restful
API,然后解析后台再次来到的JSON对象在界面上呈现。

  /config :配置相关(数据库配置)

  /controllers :控制器层(处理千丝万缕的逻辑关系)

  /middlreware : 中间件(主要做校验的逻辑)

  /modules : 模块(区分业务模块)

  /routes :路由(区分接口路由)

  /schema : model层(重要是目的和数据库的照射)

  /templates : 模板(首尽管为了一键生成新的模块,升高开发作用)

  /util :自定义组件、工具

  /app.js :入口文件

  /createModule.js :创立新模块命令

  二 、创建新模块

  ① 配置数据库连接

const sequelizeTemp = require('./local_db')
const Sequelize = require('sequelize');
let db = null
if (sequelizeTemp) {
  db = sequelizeTemp.sequelize
} else {
  const sequelize = new Sequelize('monitor_db', 'username', 'password', {
    host: 'ip',
    dialect: 'mysql',
    operatorsAliases: false,
    dialectOptions: {
      charset: "utf8mb4",
      collate: "utf8mb4_unicode_ci",
      supportBigNumbers: true,
      bigNumberStrings: true
    },
    pool: {
      max: 5,
      min: 0,
      acquire: 30000,
      idle: 10000
    },
    timezone: '+08:00' //东八时区
  });
  db = sequelize
}
module.exports = {
  sequelize: db
}

 

  ②创设新模块 node createModule.js NewModule

4858美高梅 7

  如此会变动新的model,我们须求在内部配置数据库相关的字段,那样就足以跟mysql形成映射关系,就无需在数据库中国建工业总会集团表。以js错误的model为例,个中baseInfo为通用属性方法,会为model添加通用的属性:

const baseInfo = require('./baseInfo');
module.exports = function (sequelize, DataTypes) {
  return sequelize.define('JavascriptErrorInfo', {
    ...baseInfo(DataTypes),
    // ID 主键
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      allowNull: false,
      autoIncrement: true,
    },
    // JS报错信息
    errorMessage: {
      type: DataTypes.TEXT,
      allowNull: true,
      field: 'errorMessage'
    },
    // JS报错堆栈
    errorStack: {
      type: DataTypes.TEXT,
      allowNull: true,
      field: 'errorStack'
    },
    // 浏览器信息
    browserInfo: {
      type: DataTypes.TEXT,
      allowNull: true,
      field: 'browserInfo'
    },
  }, {
    // 如果为 true 则表的名称和 model 相同,即 user
    // 为 false MySQL创建的表名称会是复数 users
    // 如果指定的表名称本就是复数形式则不变
    freezeTableName: false
  })

}

  ③拍卖modules和controllers层里边的逻辑

  ④为接口添加路由代码

const Router = require('koa-router')
const UserController = require('../controllers/user')
const ProjectController = require('../controllers/project')
const BehaviorInfoController = require('../controllers/behaviorInfo')
const JavascriptErrorInfo = require('../controllers/javascriptErrorInfo')
const CustomerPVController = require('../controllers/customerPV')
const CommonController = require('../controllers/common')
const router = new Router({
    prefix: '/api/v1'
})

/**
 * 日志相关处理
 */
// 用户注册
router.post('/uploadLog', CommonController.uploadLog);

/**
 * 用户接口
 */
// 用户注册
router.post('/user', UserController.create);
// 用户登录
router.post('/user/login', UserController.login);
// 获取用户信息
router.get('/user', UserController.getUserInfo);
// 获取用户列表
router.get('/user/list', UserController.getUserList);
// 删除用户
router.delete('/user/:id', UserController.delete);

...

module.exports = router

  ⑤执行命令 npm run start , 即可在mysql数据库中开创数量库表

4858美高梅 8

  

  到此,后台服务器便可成功运行了

 

  上一章: 搭建前端监察和控制体系(二)JS错误监察和控制篇

  下一章: 搭建前端监察和控制系列(四)体现平台铺排篇

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有