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. java实现图片和pdf添加铺满文字水印

    依赖jar包 <!-- pdf start --> <dependency> <groupId>com.itextpdf</groupId> <a ...

  2. 反射(hasattr和setattr和delattr)

    反射(hasattr和setattr和delattr) 一.反射在类中的使用 反射就是通过字符串来操作类或者对象的属性, 反射本质就是在使用内置函数,其中反射有以下四个内置函数: hasattr:通过 ...

  3. 有关iOS热更新

    iOS热更新的几篇文章,看完这几篇,自己集成一下.下面说一下我集成时遇到的问题. 这是原作者的JSPatch的讲解的文章:<JSPatch – 动态更新iOS APP>.<JSPat ...

  4. Java复习(三)类中的方法

    3.1方法的控制流程 与C/C++类似 3.2异常处理 Java处理错误的方法 抛出(throw)异常 在方法的运行过程中,如果发生了异常,则该方法生成一个代表该异常的代码并把它交给运行时系统,运行时 ...

  5. oracle_(第一课) 安装oracle数据库

    首先去官网下载两个架包链接如下:官网链接 第一步:将两个架包解压到同一个database目录下.如截图所示: 第二步:打开setup应用程序 打开后就到了下面这个页面 第三步:配置安全更新 环境变量配 ...

  6. 2019-2020-1 20199324《Linux内核原理与分析》第二周作业

    一.知识点总结 1.冯诺依曼体系结构的要点: ①五大基本类型部件:运算器.控制器.存储器.输入设备.输出设备 ②用二进制来表示指令和数据 ③ 核心:存储程序计算机 2.常见的汇编指令 mov指令(l指 ...

  7. spring自定义controller全局异常拦截

    --异常类可以按需要自定义package com.dhht.wechat.exception; import com.alibaba.fastjson.JSONObject;import org.sp ...

  8. linear correlation coefficient|Correlation and Causation|lurking variables

    4.4 Linear Correlation 若由SxxSyySxy定义则为: 所以为了计算方便: 所以,可以明白的是,Sxx和Sx是不一样的! 所以,t r is independent of th ...

  9. 自定义控件 监控宿主activity的生命周期

    使用不显示的fragment来监控activity生命周期,fragment生命周期基本上跟随宿主activity变化.我们通过fragment的生命周期就可以知到activity的生命周期 我们自定 ...

  10. ABC:Meaningful Mean

    题目描述 You are given an integer sequence of length N, a= {a1,a2,…,aN}, and an integer K. a has N(N+1)⁄ ...