Express實(shí)現(xiàn)前端后端通信上傳圖片之存儲(chǔ)數(shù)據(jù)庫(kù)(mysql)傻瓜式教程(二)
在上篇文章給大家介紹了express實(shí)現(xiàn)前端后端通信上傳圖片之存儲(chǔ)數(shù)據(jù)庫(kù)(mysql)傻瓜教程(一)
數(shù)據(jù)庫(kù)如標(biāo)題,使用開(kāi)源的mysql為基礎(chǔ),我是下載的解壓版本(自行百度就有,用百度下載的就行),配置過(guò)程http://www.dhdzp.com/article/76206.htm,本人在安裝過(guò)程中,對(duì)于配置my.ini文件著實(shí)找了好久的教程,所以貼上本人的my.ini文件
[mysqld] basedir="D:/MySql" datadir="D:/MySql/data" port = 3306 socket = "/tmp/mysql.sock" [client] password = port = 3306 socket = "/tmp/mysql.sock" default-character-set = utf8
可以看到我的mysql是安裝在Mysql文件夾下的,大家可以按照自己的路徑進(jìn)行修改。
然后在bin文件夾下運(yùn)行
mysqld -install
安裝mysql服務(wù),然后啟動(dòng)服務(wù)。
net start mysql
上面的配置mysql教程鏈接中有navicat for mysql的下載地址(是mysql的可視化工具),還有注冊(cè)的信息,不想打命令行的同學(xué)可以下載使用,更加方便些。
第一次登陸數(shù)據(jù)庫(kù)
mysql -uroot -p
直接回車,沒(méi)有密碼。
(ps:我在使用中手動(dòng)填寫(xiě)數(shù)據(jù)庫(kù)時(shí),輸入中文時(shí)會(huì)有亂碼問(wèn)題,解決方案如下:右鍵一個(gè)數(shù)據(jù)庫(kù),然后選擇數(shù)據(jù)庫(kù)屬性,修改字符集為utf8格式,整理選擇第一個(gè)就行,如圖:
)
下面就要使用node連接數(shù)據(jù)庫(kù)了。各位看官可以泡杯茶繼續(xù)~。
felixge/node-mysql是一個(gè)純nodejs的用javascript實(shí)現(xiàn)的一個(gè)MySQL客戶端程序。felixge/node-mysql封裝了Nodejs對(duì)MySQL的基本操作,100% MIT公共許可證。
項(xiàng)目地址:https://github.com/felixge/node-mysql
在項(xiàng)目中安裝node-mysql,進(jìn)入昨天建立好的myapp文件夾,運(yùn)行:
npm install mysql
接下來(lái)進(jìn)行測(cè)試,把官網(wǎng)的例子修改下,放到咱們的項(xiàng)目里面,修改routes/index.js,重啟express
var express = require('express');
var router = express.Router();var mysql = require('mysql'); //調(diào)用MySQL模塊
router.get('/', function(req, res) {
res.render('index', {
title: '孟星魂'
});
//創(chuàng)建一個(gè)connection
var connection = mysql.createConnection({
host: '127.0.0.1', //主機(jī)
user: 'root', //MySQL認(rèn)證用戶名
password: '111', //MySQL認(rèn)證用戶密碼,沒(méi)有測(cè)試沒(méi)有密碼時(shí)為空是否能登陸,不能的話設(shè)置下登陸密碼
port: '3306', //端口號(hào)
database: 'nodesample'
});
//創(chuàng)建一個(gè)connection
connection.connect(function(err) {
if (err) {
console.log('[query] - :' + err);
return;
}
console.log('[connection connect] succeed!');
});
//執(zhí)行SQL語(yǔ)句
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) {
console.log('[query] - :' + err);
return;
}
console.log('The solution is: ', rows[0].solution);
});
//關(guān)閉connection
connection.end(function(err) {
if (err) {
return;
}
console.log('[connection end] succeed!');
});
});
module.exports = router;
打開(kāi)頁(yè)面后,命令符顯示效果如下:
測(cè)試成功??!,下面建立測(cè)試數(shù)據(jù)庫(kù)
CREATE DATABASE IF NOT EXISTS nodesample CHARACTER SET UTF8; USE nodesample; SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `userinfo`; CREATE TABLE `userinfo` ( `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `UserName` varchar(64) NOT NULL COMMENT '用戶名', `UserPass` varchar(64) NOT NULL COMMENT '用戶密碼', PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶信息表';
這段代碼可以直接在navicat里面運(yùn)行,點(diǎn)擊工具,console,粘貼,回車就好了。
接下來(lái)往數(shù)據(jù)庫(kù)中添加一條數(shù)據(jù),修改routes/index.js,如下
var express = require('express');
var router = express.Router();
var mysql = require('mysql'); //調(diào)用MySQL模塊
router.get('/', function(req, res) {
res.render('index', {
title: '孟星魂'
});
//創(chuàng)建一個(gè)connection
var connection = mysql.createConnection({
host: '127.0.0.1', //主機(jī)
user: 'root', //MySQL認(rèn)證用戶名
password: '111', //MySQL認(rèn)證用戶密碼
port: '3306', //端口號(hào)
database: 'nodesample'
});
//創(chuàng)建一個(gè)connection
connection.connect(function(err) {
if (err) {
console.log('[query] - :' + err);
return;
}
console.log('[connection connect] succeed!');
});
//執(zhí)行SQL語(yǔ)句
var userAddSql = 'INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)';
var userAddSql_Params = ['Wilson', 'abcd'];
//增
connection.query(userAddSql, userAddSql_Params, function(err, result) {
if (err) {
console.log('[INSERT ERROR] - ', err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:', result);
console.log('-----------------------------------------------------------------\n\n');
});
//關(guān)閉connection
connection.end(function(err) {
if (err) {
return;
}
console.log('[connection end] succeed!');
});
});
module.exports = router;
重啟express,刷新頁(yè)面,命令符顯示:
數(shù)據(jù)庫(kù)顯示:
好了,現(xiàn)在大家已經(jīng)可以操作數(shù)據(jù)庫(kù)了,基本的一些操作請(qǐng)參考http://www.cnblogs.com/zhongweiv/p/nodejs_mysql.html#mysql_mod,增刪改查里面都有介紹。
后面應(yīng)該是介紹大家上傳的圖片存儲(chǔ)數(shù)據(jù)庫(kù)的,但遇到了一些坑,才解決,最精彩的留在明天~,
主要是路由的問(wèn)題,主頁(yè)請(qǐng)求了模板,這個(gè)時(shí)候是無(wú)法在往前端發(fā)送數(shù)據(jù)的,所以會(huì)用到express的中間件,大家晚安~。
- Express實(shí)現(xiàn)前端后端通信上傳圖片之存儲(chǔ)數(shù)據(jù)庫(kù)(mysql)傻瓜式教程(一)
- 淺析node連接數(shù)據(jù)庫(kù)(express+mysql)
- MySQL運(yùn)行報(bào)錯(cuò):“Expression?#1?of?SELECT?list?is?not?in?GROUP?BY?clause?and?contains?nonaggre”解決方法
- node基于express框架操作Mysql數(shù)據(jù)庫(kù)的步驟
- 解決大于5.7版本mysql的分組報(bào)錯(cuò)Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated
- Node.js+Express+Mysql 實(shí)現(xiàn)增刪改查
- Express項(xiàng)目中操作MySQL的步驟
相關(guān)文章
基于js里調(diào)用函數(shù)時(shí),函數(shù)名帶括號(hào)和不帶括號(hào)的區(qū)別
下面小編就為大家?guī)?lái)一篇基于js里調(diào)用函數(shù)時(shí),函數(shù)名帶括號(hào)和不帶括號(hào)的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
JS原型prototype和__proto__用法實(shí)例分析
這篇文章主要介紹了JS原型prototype和__proto__用法,結(jié)合實(shí)例形式分析了JS原型prototype和__proto__使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-03-03
JS中使用 after 偽類清除浮動(dòng)實(shí)例
這篇文章主要介紹了使用 after 偽類清除浮動(dòng)實(shí)例,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下2017-03-03
Blob對(duì)象實(shí)現(xiàn)文件上傳下載示例詳解
這篇文章主要為大家介紹了Blob對(duì)象實(shí)現(xiàn)文件上傳下載示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
基于Cesium實(shí)現(xiàn)拖拽3D模型的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Cesium實(shí)現(xiàn)在地圖上添加一個(gè)3D模型,并且可以實(shí)現(xiàn)拖拽效果。文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-06-06
JavaScript中使用Object.create()創(chuàng)建對(duì)象介紹
這篇文章主要介紹了JavaScript中使用Object.create()創(chuàng)建對(duì)象介紹,本文先是講解了語(yǔ)法,然后給出了創(chuàng)建實(shí)例,需要的朋友可以參考下2014-12-12
jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)右側(cè)欄菜單選擇操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03

