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

数据库配置文件

在开发项目时,应该将数据库账号密码的配置文件单独放在配置文件中,所以在项目目录下先新建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 提交

将js进行到底:node学习10的更多相关文章

  1. JavaScript学习10 JS数据类型、强制类型转换和对象属性

    JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...

  2. 【特别推荐】Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  3. Node.js 入门教程和学习资源汇总

    这篇文章与大家分享一批很有用的 Node.js 入门教程和学习资源.Node 是一个服务器端的 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用 ...

  4. Node.js 入门到干活,10 个优质项目就够了!

    Node.js 在很多大公司都有不错的实践,比如:淘宝.天猫 Web 版,很多页面都是在 Node 服务器上渲染的.还有各种脚手架.前端打包发布工具.构建生态的小工具,也基本都是 Node.js 编写 ...

  5. Node.js环境搭建和学习(windwos环境)

    Node.js环境搭建和学习 一.环境搭建 1.下载安装文件 下载地址http://nodejs-org.qiniudn.com/下载Node.js环境安装包,根据操作系统下载对应的安装包 下载地址 ...

  6. 2015第40周二Node学习

    node历史 今天看cnode开源项目用了io.js,在查这个项目时发现这篇文章node历史,node.js和io.js关系谈到Node.js的由来,不可避免要聊到它的创始人Ryan Dahl.在20 ...

  7. node 学习资源网址---存根

    Node.js 使用场景 & 实战 Node.js雪球实战半年谈 雪球上的 Node.js 国内有哪些网站使用了 Node.js Node.js & Uber Node.js 的优势和 ...

  8. node学习第一天

    创建服务器 利用require引入http模块:var http=require("http") 利用http模块创建server服务器; 创建服务器:var server=htt ...

  9. node 学习笔记 - Modules 模块加载系统 (1)

    本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...

随机推荐

  1. 第一行代码新闻例子报错 Unable to start activity ComponentInfo 原因

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.timemanager.jason.fragmentbestpractice, PID: 56 ...

  2. java添加后台缓存

    public class Cache { private String key;//缓存ID private Object value;//缓存数据 private long timeOut;//更新 ...

  3. centos 7.2 php7+ 安装elasticsearch

    安装 Elasticsearch-php 的安装需要满足以下 4 个需求: PHP 7.0.0 或更高版本 Composer ext-curl:PHP 的 Libcurl 扩展(详情查看下方注意事项) ...

  4. no.2淘宝架构背后——零售业务中台架构设计探讨及实践读后感

    2017年8月12日,袋鼠云首席架构师正风在“网易博学实践日:大数据与人工智能技术大会”进行<淘宝架构演进背后——零售业务中台架构设计探讨及实践>演讲分享.传统零售行业如何选择应对新经济模 ...

  5. 刷题34. Find First and Last Position of Element in Sorted Array

    一.题目说明 题目是34. Find First and Last Position of Element in Sorted Array,查找一个给定值的起止位置,时间复杂度要求是Olog(n).题 ...

  6. Please select an empty folder to install Android Studio

    原因 当前安装的Android Studio的文件夹不是空的 解决 把路径改成一个空文件夹即可

  7. Codeforces Round #517 (Div. 2)(1~n的分配)

    题:https://codeforces.com/contest/1072/problem/C 思路:首先找到最大的x,使得x*(x+1)/2 <= a+b 那么一定存在一种分割使得 a1 &l ...

  8. android课程表控件、悬浮窗、Todo应用、MVP框架、Kotlin完整项目源码

    Android精选源码 Android游戏2048 MVP Kotlin项目(RxJava+Rerotfit+OkHttp+Glide) Android基于自定义Span的富文本编辑器 android ...

  9. 4412开发板QtE系统下MT6620-wifi的测试

    基于iTOP4412系统烧写并启动之后,使用如下命令.wpa_passphrase XXX "YYY " >> /etc/wpa_supplicant.conf其中 X ...

  10. java面试和笔试大全

    2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java.lang.String类是final类型 ...