全栈宝宝级教学—小程序前端+Express后端+MySQL数据库(中)

  紧接上一节,这一篇我们主要讲Express搭建,这篇内容会比较多,大家需要细心一点
  全栈宝宝级教学—小程序前端+Express后端+MySQL数据库(上)
  全栈宝宝级教学—小程序前端+Express后端+MySQL数据库(下)

四、Express搭建

 现在我们开始Express的安装
 输入以下命令(后面带个-g 指全局安装):

sudo npm install express -g
sudo npm install express-generator -g
#查看express版本
express --version
#4.16.1
安装express后

然后进入当前用户文件夹下,并创建我们的项目“myProject”,命令如下

#进入到当前用户目录下
cd ~
#创建我们的express项目
express myProject
#查看当前目录下的所有文件
ls
查看项目结构

已经安装好了,但是还需要安装一些依赖,然后测试一下

#打开我们的项目文件夹,cd 然后打个m,按Tab键会自动补全
cd myProject/
#安装依赖
npm install 
#启动服务
npm start

然后我们在浏览器中,输入你服务器的IP:3000(如127.0.0.1:3000),就可以看到如下画面啦


启动服务器
浏览器界面

接下来就要写Model层啦,当然写法也有很多种,简单的写法是不封装直接在函数里面写SQL语句,但是这样后期维护非常麻烦,所以为了我们的代码整洁,且逻辑清晰,这里都对各个部分进行了简单封装。
先放一个最后的目录结构图,其中\color{red}{红框}表示我们需要手动创建的文件,\color{blue}{蓝框}表示框架生成但是我们需要进行修改的文件。

项目结构

首先创建一个conf文件夹用来放一些配置信息

mkdir conf

之后创建一个dao文件夹(Data Access Object)用来放跟数据库操作相关文件

mkdir dao

在myProject目录下进入conf文件夹

cd conf

然后创建一个database.js文件用来配置我们的数据库信息,创建新文件可以直接用vim/nano 文件名.文件类型
关于这两个编辑器你喜欢哪个,个人建议初学者可以先使用nano,因为有提示,等你写的多了就自然会用vim了

vim database.js

然后你将看到如下界面:

database.js

考虑到该篇为宝宝级教学,在这里就讲几个最最基础的操作(了解更多请点这里),为了用最简单的方式完成任务,你只需要知道以下4个按键/命令

用途 按键/命令
进入命令模式 按 esc
进入编辑模式 按 i
保存退出 :wq
强制退出 :q!

我们一用vim打开某个文件时,就进入的是命令模式,这时候按 i 键就进入了编辑模式,然后就可以愉快的写代码啦,当你敲完以下代码后(其中的password替换成你自己的数据库密码):

编辑模式

当你写完后请按 Esc 键,这样我们又进入了命令模式,然后请输入:wq,我们就保存文件并退出了,因为我们用的MySQL所以还需要在package.json文件里面配置一下

返回上一级目录

cd ..

编辑package.json文件

vim package.json

在"dependencies"里面加入下面这行代码,如果报错,看看是不是少逗号

"mysql": "latest"

最后文件内容大概如下:

{
  "name": "myproject",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1",
    "mysql": "latest"
  },
  "devDependencies": {
    "body-parser": "^1.19.0"
  }
}

按Esc,保存退出

:wq

好了现在我们进入dao文件夹,先创建一个basicConnection.js用来连接数据库

cd dao

创建一个basicConnection.js文件

vim basicConnection.js

将以下代码输入进去,第一个function是做返回响应的,第二个function是与数据库建立链接并执行操作

var mysql = require('mysql');
var dbConfig = require('../conf/database');

var pool = mysql.createPool(dbConfig.mysql);

function responseDoReturn(res, result,resultJSON) {
    if(typeof result === 'undefined') {
        res.json({
            code:'201',
            msg: 'failed to do'
        });
    } else {
        res.json(result);
    }
};

function queryArgs(sql,args, callback) {
    console.log('Doing basicConnect.queryArgs');
    pool.getConnection(function (err, connection) {
        connection.query(sql, args,function (err, rows) {
            callback(err, rows);
            connection.release();
        });
    });
}

module.exports = {
    queryArgs: queryArgs,
    doReturn: responseDoReturn
}

最后同样按Esc,保存退出

:wq

然后我们要在dao文件夹里再创建一个products文件夹,这个文件夹中的products_sql.js用来向外部提供所用到的SQL语句,而products_dao.js用来向外部提供对该表操作的接口(比如增删改查,这里为了测试就只写了增,剩下的大家改写一下就ok)记得每个文件写完后保存退出

mkdir products

进入products文件夹里

cd products

创建products_sql.js

vim products_sql.js

输入以下代码,这个里面就是SQL语句了,包含了增删改查基本操作

var product_sql = {
    addProduct: "INSERT INTO products(name,price) VALUES(?,?);",
    deleteProduct: "DELETE FROM products WHERE id = ?;",
    updateProduct: "UPDATE products SET name = ?, price = ? WHERE id = ?;",
    queryProduct: "SELECT * FROM product WHERE id = ?;",
}

module.exports = {
    product_sql: product_sql
}

然后现在创建products_dao.js文件

vim products_dao.js

输入以下代码

var db = require('../basicConnection');
var sqlCommands = require('./products_sql');

function addProduct(req, res, next){
    console.log("Doing addProduct, req =  " + JSON.stringify(req));
    var param = req;
    console.log('sqlCommands = ' + sqlCommands.product_sql.addProduct);
    db.queryArgs(sqlCommands.product_sql.addProduct,
        [param.name, param.price],
        function(err, result){
            if(!err){
                result = {
                    code: 200,
                    msg: 'successful'
                }
            }
            db.doReturn(res, result);
        }
    )
}
module.exports = {
    addProduct: addProduct
}

  现在我们需要返回到myProject目录下(cd ../../),再安装一个body-parser,这是一个HTTP请求体解析的中间件,使用这个模块可以解析各种格式的请求体(我们等会前端用POST请求时要用到)
  返回到myProject目录下后请输入以下指令

npm install body-parser

  安装完成后,我们需要在app.js文件里面加几行代码,已经用\color{red}{红框}标示出来,大家照着打就行,不想打就分别复制下面的代码,最后保存退出:

#编辑app.js文件
vim app.js
#所添代码
var productsRouter = require('./routes/products');
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use('/products', productsRouter);
app.js

然后我们再重新输入以下代码,重新安装一下依赖

npm install

现在我们可以进入routes文件夹了,准备新建一个products.js路由文件,基本就快接近胜利了
进入routes文件夹

cd routes

创建一个products.js文件

vim products.js

输入以下代码

var express = require('express');
var router = express.Router();
var productDAO = require('../dao/products/products_dao')

router.post('/addProducts', function(req, res, next){
    console.log('Router start ')
    console.log('Red.body = ' + JSON.stringify(req.body));
    productDAO.addProduct(req.body, res, next)
});
module.exports = router;

至此我们的Express搭建可以告一段落,下一篇我们将结合前端进行测试

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342