• 将js进行到底:node学习10


    node.js数据库篇——MySQL

    NoSQL大行其道的如今,MySQL这样的关系型数据库依然有着不可撼动的位置,对于中型,大型面向对象的项目,关系型数据库依然是首选,真正的项目,应当是将数据库的任务分离给专门的数据库工程师去完成。

    本回介绍使用node.js连接mysql数据库,基于前面的express框架构建简单的购物车example。

    node.js的MySQL驱动

    数据库驱动是语言连接数据库的必备库,node.js连接mysql的基本驱动叫做“node-mysql”,另外node npm社区也提供了MySQL ORM的数据库驱动,就类似于上一回中的mongoose,基于模型映射的操作方式,叫做“node-sequelize”,性能相对于原生驱动肯定要差不少。

    package.json

    {
        "name":"shopcart",
        "version":"0.0.1",
        "description":"a shopcart example powered by express and mysql",
        "dependencies":{
            "express":"latest",
            "mysql":"latest",
            "sequelize":"latest",
            "jade":"latest"
        }
    }
    
    

    测试连接

    直接采用官方提供的连接示例:

    var mysql      = require('mysql');
    
    //创建并配置连接参数
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'root',
      password : '',
      database : 'cslg'
    });
    
    //连接
    connection.connect();
    
    //测试查询语句,使用query输入SQL语句
    connection.query('SELECT * from teacher_base_info limit 10', function (error, results, fields) {
      if (error) throw error;
      console.log(results);
    });
    
    //断开连接
    connection.end();
    

    读取成功

    实践——购物车实现

    需求分析

    算了算,大概需要如下几个基本功能

    • /:展示所有商品以及添加商品的表单
    • /projects(POST):创建项目
    • /delete/:id(DELETE):删除项目
    • /project:/:id(GET):展示某个商品详情

    为了示例简单,只做这几个功能罢了

    创建数据库

    使用phpmyadmin或者手动创建一个库,一张表

    数据库叫:shopcart
    表名:items

    items表

    数据库配置文件

    在开发项目时,应该将数据库账号密码的配置文件单独放在配置文件中,所以在项目目录下先新建dbconfig.json,使用json是因为js方便读取。

    dbconfig.json

    {
        "host"     : "localhost",
        "user"     : "root",
        "password" : "",
        "database" : "shopcart"
    }
    

    server.js

    var mysql      = require('mysql');//引入mysql驱动
    var dbconfig = require("./dbconfig.json");//引入数据库配置文件
    var express = require("express")
    var bodyParser = require('body-parser');
    var app = express();
    var connection = mysql.createConnection(dbconfig);
     
    //express框架基本配置
    app.use(bodyParser.urlencoded({ extended: true })); //对post请求表单提交的数据编码,否则服务器端无法获得
    
    app.set("view engine","jade");
    app.set("views",__dirname+"/views");
    
    connection.connect();
    //主页
    app.get("/",function(req,res){
        connection.query('SELECT * from items', function(err, data, fields) {
            if(err) throw err;
            res.render("index",{items:data});
        });
    })
    
    //删除一件商品
    app.get("/delete/:id",function(req,res){
        var id = req.params.id;
        connection.query("delete from items where id=?",id,function(err,data,fields){
            //affectedRows可查看删除行数
            console.log(data.affectedRows);
            res.redirect("/");
        });
    });
    
    //插入一件商品
    app.post("/projects",function(req,res){
        console.log(req.body);
        connection.query("insert into items SET ?",req.body,function(err, data, fields){
            if(err) throw err;
            //insertId可查看插入行的主键id编号
            console.log(data.insertId);
            res.redirect("/");
        });
    });
    
    app.listen(3000);
    

    分析套路

    事实上在使用后我发现node-mysql模块使用十分简单:

    • 引入mysql模块,createConnection创建连接,传入配置文件json
    • 在请求代码前就连接上mysql,不要将connect放到get,post中,最后也不用关闭
    • 使用query操作数据库,第一个参数为数据库语句,可以使用“?”为占位符,第二个参数为替代占位符的对象,或者单一变量
    • 最后一个参数为回调函数,其中第二个参数是数据库返回的结果

    从头到尾只使用一个query方法,传入数据库语句,回调函数获取数据即可,非常简单

    前端文件

    layout.jade

    doctype html
    html
        head
            title My shopping cart
        body
            h1 My shopping cart
            #cart
    block body
    
    

    index.jade

    extends layout
    block body
        h2 所有商品
    
        if(items.length)
            ul
                each item in items
                    li
                        h3: a(href="/project/#{item.id}")=item.title
                        p=item.description
                        span: a(href="/delete/#{item.id}") 删除
        else
            p 没有任何商品
    
        h2 创建新的商品
    
        form(action="/projects",method="POST")
            p
                label 标题
                input(type="text",name="title")
            p
                label 详情
                textarea(name="description")
            p
                button 提交
    
    
  • 相关阅读:
    MVC @Url.Action 小示例
    Eclipse快捷键
    MVC视频下载/文件上传
    MySQL数据库备份/导出
    C#文件下载
    C#正则表达式匹配字符串中的数字
    常用的LINQ to SQL 用法
    C# 实现抓取网页内容(一)
    C# 繁体字和简体字之间的相互转换
    我到底会什么??
  • 原文地址:https://www.cnblogs.com/devilyouwei/p/8478810.html
Copyright © 2020-2023  润新知