将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
數據庫配置文件
在開發項目時,應該將數據庫賬號密碼的配置文件單獨放在配置文件中,所以在項目目錄下先新建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 htmlheadtitle My shopping cartbodyh1 My shopping cart#cart block bodyindex.jade
extends layout block bodyh2 所有商品if(items.length)uleach item in itemslih3: a(href="/project/#{item.id}")=item.titlep=item.descriptionspan: a(href="/delete/#{item.id}") 刪除elsep 沒有任何商品h2 創建新的商品form(action="/projects",method="POST")plabel 標題input(type="text",name="title")plabel 詳情textarea(name="description")pbutton 提交轉載于:https://www.cnblogs.com/devilyouwei/p/8478810.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的将js进行到底:node学习10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACE学习:
- 下一篇: 看似简单但容易忽视的编程常识