码迷,mamicode.com
首页 > Web开发 > 详细

node.js从入门到放弃(一)

时间:2018-10-16 19:55:11      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:技术   来讲   exports   分享   max   注意   mit   fse   ror   

以下内容全是我个人理解写出,如有不对,请立刻练习本人进行更改。以免被刚入门的被我带入坑里。

—node是什么?我想大家应该都知道。

node是前端未来干掉后端的一种语言,是用JavaScript来编写后端代码的一种语言。前端走后端的路让后端无路可走。是前端人员走向全栈开发的一条路。

—学习node要掌握什么呢?学习它就需要掌握一下几个方面,这是我现在学习的时候需要掌握的东西,算是很基本的东西了。

一、node的安装

二、数据库的安装和使用(sql命令)

三、node最底层基本写法

四、koa框架

五、Sequelize功能模块使用

六、读写文件

node的安装在这里就不讲了,网上一搜就都能搜到的,不想搜也可以点击这个连接,去看下node安装这些都有详细的介绍。

数据库的安装在网上也能够搜索到,安装数据库可以看下这个博客,这里写的挺详细的,从安装数据库到navicat MySQL的安装都有  查看请点击这里↓↓↓↓↓↓↓

sql的命令离不开增删改查

mydb:数据库名

user:表名

text:对应的属性名

2:要插入的数据

id:主键

age:对应的属性

增: INSERT INTO `mydb`.`user` (`text`) VALUES (‘2‘);

删:DELETE FROM user WHERE id=1

改:UPDATE `mydb`.`user` SET `age`=‘22‘ WHERE `id`=‘1‘;

查:select * from user

以上就是数据操作的主要四个,其他命令可以百度一下,一抓一大把。

接下来进入最主要的地方了,开是接触放弃的地方了,底层的基本用法

+开始需要把数据库放进去才能够使用

$ cnpm install mysql

 接下来引入你本地的数据库

// 连接数据库
var mysql      = require(‘mysql‘);
var connection = mysql.createConnection({
host     : ‘localhost‘,
user     : ‘root‘,
password : ‘123456‘,
database : ‘node‘
}); 

 接下来开始捣鼓你的数据库(我的数据库放了一下的数据名)

技术分享图片

 

 接下来对下面的数据进行操作(用上面已经连接上的数据库)

node底层写法:

var http = require(‘http‘);
// 连接数据库
var mysql      = require(‘mysql‘);
var connection = mysql.createConnection({
host     : ‘localhost‘,
user     : ‘root‘,
password : ‘123456‘,
database : ‘node‘
}); 
// 请求下数据库
connection.connect();   
var http = require("http");
var url = require("url");
// 调用方法
function start() {
  function onRequest(request, response) {}
  http.createServer(onRequest).listen(8888);
 端口号是8888去进行请求 } start();

  新增数据方法

// 新增数据
const hello = function (response, data) {
  connection.query(`INSERT INTO log  (content, summary, user, day) VALUES ("${data.content}", "${data.summary}", "${data.user}","${data.day}");`, function (error, results, fields) {
    if (error) throw error;
      // 请求成功,返回格式
      response.writeHead(200, {"Content-Type": "application/json"});
      // 返回给页面的数据
      response.write(JSON.stringify(results.insertId));
      // 请求结束
      response.end();
  });
}

  获取列表

//  获取列表
const hello2 = function (response, data) {
  connection.query(`select * from log`, function (error, results, fields) {
    if (error) throw error;
      response.writeHead(200, {"Content-Type": "application/json"});
      response.write(JSON.stringify(results));
      response.end();
  });
}

  删除事件

// 删除id=4
const hello4 = function (response,data){
  console.log(data)
  connection.query(`DELETE FROM log WHERE id=${data.id}`,function (error,results,fields) {
    if (error) throw error;

    response.write("ok");
    response.end();
  })
}

  分页写法

// 分页写法
const hello3 = function (response, page, size) {
  console.log(‘page, size‘, page, size)
  connection.query(`select * from log  limit ${size} offset ${(page-1)*size} `, function (error, results, fields) {
    if (error) throw error;
      response.writeHead(200, {"Content-Type": "application/json"});
      response.write(JSON.stringify(results));
      response.end();
  });
}

  调用的话直接调用方法就可以(这里还需要注意是get请求还是post请求)

// 调用方法
function start() {
  function onRequest(request, response) {
    // /hello
    var pathname = url.parse(request.url).pathname.split(‘/‘);
    // /hello3/1/10
    // 接收数据
    if (request.method === ‘POST‘) {
      request.on(‘data‘, function(data) {
        // 把数据转换成json格式
        let data1 = JSON.parse(data.toString())
        console.log(‘data: ‘, data1.toString(), data1)
        // 接收到的接口调用什么方法
        switch(pathname[1]) {
          case ‘hello‘: { hello(response, data1) } break;
          case ‘hello2‘: { hello2(response, data1) } break;
          case ‘hello3‘: { 
            // 用拼接的方式(get)获取数据方法
            // let page = pathname[2]
            // let size = pathname[3]
            // console.log(pathname)
            // 用接收体来调用数据(post)
            hello3(response, data1.page, data1.size) 
          } break;
          case ‘hello4‘: { hello4(response, data1) } break;
          // 调用weitch方法
          default: response.end();
        }
      })
    }

  完整的使用代码

var http = require(‘http‘);
// 连接数据库
var mysql      = require(‘mysql‘);
var connection = mysql.createConnection({
host     : ‘localhost‘,
user     : ‘root‘,
password : ‘123456‘,
database : ‘node‘
}); 
// 请求下数据库
connection.connect();   
var http = require("http");
var url = require("url");
// 新增数据
const hello = function (response, data) {
  connection.query(`INSERT INTO log  (content, summary, user, day) VALUES ("${data.content}", "${data.summary}", "${data.user}","${data.day}");`, function (error, results, fields) {
    if (error) throw error;
      // 请求成功,返回格式
      response.writeHead(200, {"Content-Type": "application/json"});
      // 返回给页面的数据
      response.write(JSON.stringify(results.insertId));
      // 请求结束
      response.end();
  });
}
//  获取列表
const hello2 = function (response, data) {
  connection.query(`select * from log`, function (error, results, fields) {
    if (error) throw error;
      response.writeHead(200, {"Content-Type": "application/json"});
      response.write(JSON.stringify(results));
      response.end();
  });
}
// 删除id=4
const hello4 = function (response,data){
  console.log(data)
  connection.query(`DELETE FROM log WHERE id=${data.id}`,function (error,results,fields) {
    if (error) throw error;

    response.write("ok");
    response.end();
  })
}
// 分页写法
const hello3 = function (response, page, size) {
  console.log(‘page, size‘, page, size)
  connection.query(`select * from log  limit ${size} offset ${(page-1)*size} `, function (error, results, fields) {
    if (error) throw error;
      response.writeHead(200, {"Content-Type": "application/json"});
      response.write(JSON.stringify(results));
      response.end();
  });
}

// 调用方法
function start() {
  function onRequest(request, response) {
    // /hello
    var pathname = url.parse(request.url).pathname.split(‘/‘);
    // /hello3/1/10
    // 接收数据
    if (request.method === ‘POST‘) {
      request.on(‘data‘, function(data) {
        // 把数据转换成json格式
        let data1 = JSON.parse(data.toString())
        console.log(‘data: ‘, data1.toString(), data1)
        // 接收到的接口调用什么方法
        switch(pathname[1]) {
          case ‘hello‘: { hello(response, data1) } break;
          case ‘hello2‘: { hello2(response, data1) } break;
          case ‘hello3‘: { 
            // 用拼接的方式(get)获取数据方法
            // let page = pathname[2]
            // let size = pathname[3]
            // console.log(pathname)
            // 用接收体来调用数据(post)
            hello3(response, data1.page, data1.size) 
          } break;
          case ‘hello4‘: { hello4(response, data1) } break;
          // 调用weitch方法
          default: response.end();
        }
      })
    }

    // Get
    if (request.method === ‘GET‘) {
      response.end(‘aaaaa‘);
    }
  }
 
  http.createServer(onRequest).listen(8888);
}
start();

  

 开始化简模式。学习使用koa框架

安装koa

npm intall koa2
npm intall koa-router

  在页面引入

const Koa = require(‘koa‘)
const bodyParser = require(‘koa-bodyparser‘)
const Router = require(‘koa-router‘)

  来个简单例子

const Koa = require(‘koa‘);
//引入koa
  const app = new Koa();
  //方法放到app下
  app.use(async ctx => {
    ctx.body = ‘Hello World‘;
  });
  //执行方法
  app.listen(3000);
//app创建端口号

  koa主要的就是request的请求方法,response响应,因为太多就不在这讲了,想了解的   戳这里↓↓↓↓↓

 

app.use(async ctx => {
    console.log(ctx.request.href)
//获取到地址,换个方法就可以获取前台传得数据
    ctx.response.body = "aaaaa"
//返回值
});

  来上面的去看文档慢慢敲就行了,Sequelize功能模块使用来讲一下

var Sequelize = require(‘sequelize‘);
var mysql = new Sequelize(‘node‘, ‘root‘, ‘123456‘, {
    host: ‘localhost‘,
    dialect: ‘mysql‘,
    pool: {
        max: 5,
        min: 0,
        idle: 10000
    },
})

  看数据库的导入方式就不一样了,接下来我们使用的可能多数都是这样的,样式了。

//数据表里面的内容
var Log = mysql.define(‘log‘, {
    id: {
        primaryKey: true,
        type: Sequelize.INTEGER,
    },
    content: Sequelize.STRING,
    summary: Sequelize.STRING,
    user: Sequelize.STRING,
    day: Sequelize.STRING,
  }, {
    freezeTableName: true, // Model 对应的表名将与model名相同
    timestamps: false
  });

  使用方法查询数据

Log.findAll({
        where: {
            $and: [
                { id: {gt: 32} },
                 //大于多少
                { id: {lt: 35} }
                //小于等于多少
            ]
        },
        raw: true
    }).then(res => {
        console.log(res.length)
    //一共多少条
    for(var i=0 ;i<res.length;i++){
//遍历出来显示
        Log.create(
        {
            content: res[i].content,
            summary: res[i].summary,
            user: res[i].user,
            day: res[i].day
        }
    )
    }
    
})

  整体使用

const main = async function() {
//查询所有
    let res = await Log.findAll({
        raw: true
    })
//写入
    let newDatas = res.map(item => ({
        a: item.content,
        b: item.summary,
        c: item.user,
        d: item.day,
    }))
//往新表里插入多条数据
    await Aaa.bulkCreate(newDatas)
//删除数据
    await Aaa.destroy({ where: {
        id: 2
    }})
//修改数据
    await Aaa.update({
        a: ‘item.content‘,
        b: ‘item.summary‘,
        c: ‘item.user‘,
        d: ‘item.day‘,
    }, {
        where: {
            id: 3
        }
    })
}

main()

  接下来进行三军会师,用三种方法写成最简单的代码来调用数据

开始在app文件中

const Koa = require(‘koa‘)
const bodyParser = require(‘koa-bodyparser‘)
const router = require(‘./controllers‘)
//引入使用包
const app = new Koa()
app.use(bodyParser())
//调用koabadyparser方法
app.use(router.routes())
app.listen(3000)
//引入文件,创建端口

  在controllers文件中写入方法并进行调用

const Router = require(‘koa-router‘)
const router = new Router()
const services = require(‘./services‘)

//查询所有数据
router.get(‘/‘, async (ctx, next) => {
    let res = await services.hello1()
    ctx.body = res
});
//返回值hello world
router.get(‘/hello‘, (ctx, next) => {
    ctx.body = "hello world"
});
//新增数据
router.post(‘/hello2‘, async (ctx, next) => {
    let obj = ctx.request.body
    let res = await services.hello2(obj)
    let eee = {
        content : res.content,
        summary : res.summary
    }
    ctx.body = {
        statusCode: 200,
        result:eee
    }
})
//删除数据
router.post(‘/hello3‘, async (ctx, next) => {
    let obj = ctx.request.body
    let res = await services.hello3(obj)

    ctx.body = {
        statusCode: 200,
    }
})
//查询数据
router.post(‘/hello4‘, async (ctx, next) => {
    let obj = ctx.request.body
    let res = await services.hello4(obj)
    ctx.body = res
})
//更改数据
router.post(‘/hello5‘, async (ctx, next) => {
    let obj = ctx.request.body
    let res = await services.hello5(obj)
    ctx.body = res
})
//调用
module.exports = router

  在services.js文件中

const Log = require(‘./models‘)

const hello = async function (obj) {
    //放个查询方法
    let logs = await Log.Log.findAll({
        where: {
            $and: [
                {id: { $gt: obj.id }},
                {id: { $lte: obj.css }}
            ]
        }
    })

    return logs
}
//查询所有数据大于0的
const hello1 = async function () {
    let loge = await Log.Log.findAll({
        where: {
            id: { gt: 0},
        }
    })

    return loge
}
//新增数据
const hello2 = async function (obj) {
    let loge = await Log.rizhi.create({
            content:obj.content,
            summary:obj.summary,
            user:obj.user,
            day:"2015-10-7"
    })

    return loge
}
//删除数据
const hello3 = async function (obj) {
    let loge = await Log.rizhi.destroy({
           where:{
                id : obj.id
            }   
     })

    return loge
}
查询数据
const hello4 = async function (obj) {
    let ass = {
        content : obj.content,
        summary : obj.summary,
        user : obj.user, 
    }
    if(!obj.content){
       delete ass.content
    }
    if(!obj.summary){
        delete ass.summary
    }
    if(!obj.user){
        delete ass.user
    }
    let loge = await Log.rizhi.findAll({ 
        
           where:ass   
     })

    return loge
}
//更改数据
const hello5 = async function (obj) {
    let ass = {
        content : obj.content,
        summary : obj.summary,
        user : obj.user, 
    }

    let loge = await Log.rizhi.update(ass,{ 
        
           where:{
                id : obj.id
           }
     })
     let cha = await Log.rizhi.findAll({
        where: {
            id: obj.id,
        }
    })
    return cha
}
需要调用的方法
module.exports = {
    hello,hello1,hello2,hello3,hello4,hello5
}

 最后将表格的内容模块导入到models.js中

const mysql = require(‘./mysql‘)
//导入数据库
const Sequelize = require(‘sequelize‘)


//log表内数据格式
var Log = mysql.define(‘log‘, {
    id: {
        primaryKey: true,
        type: Sequelize.INTEGER,
    },
    content: Sequelize.STRING,
    summary: Sequelize.STRING,
    user: Sequelize.STRING,
    day: Sequelize.STRING,
}, {
        freezeTableName: true, // Model 对应的表名将与model名相同
        timestamps: false
});
  
//日志表内数据格式
var rizhi = mysql.define(‘rizhi‘, {
    id: {
        primaryKey: true,
        type: Sequelize.INTEGER,
    },
    content: Sequelize.STRING,
    summary: Sequelize.STRING,
    user: Sequelize.STRING,
    day: Sequelize.STRING,
}, {
        freezeTableName: true, // Model 对应的表名将与model名相同
        timestamps: false
});

调出两个表
module.exports = {Log,rizhi}

  这就是一个完整的的node项目了,增删改查,以后就需要自己去扩展了

读写文件的话,就免不了书把txt,excel、sql、之间的数据转换,以后在讲。。。。。。

 

node.js从入门到放弃(一)

标签:技术   来讲   exports   分享   max   注意   mit   fse   ror   

原文地址:https://www.cnblogs.com/yishifuping/p/9783917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!