歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> NodeJS+Express+MySQL 增刪改查

NodeJS+Express+MySQL 增刪改查

日期:2017/2/28 13:46:00   编辑:Linux教程

之前,一直使用的是nodejs+thinkjs來完成自己所需的項目需求,而對於nodejs中另外一中應用框架express卻了解的少之又少,這兩天就簡單的了解了一下如何使用express來做一些數據庫的增刪改查。

准備工作:

所需工具:電腦上要安裝好nodejs(官網https://nodejs.org/en/),下載並安裝好nodejs之後,需要在cmd中再安裝好express框架:

npm install express-generator -g

安裝完畢之後,檢查一下是否安裝成功:

還有一個工具就是連接數據庫操作的Navicat客戶端(我們平常連接數據庫的工具,挺好用的。)

准備好這些工具之後,就可以開始我們的數據庫操作了(記得電腦上也要裝上webstroms,這個就跳過不說了)。

著手demo:

1.打開webstroms,新建一個express項目:

接著選擇好文件類型:

在這裡,我選擇的是EJS模板引擎,這個憑自己喜好決定。於是新建好的項目目錄就是醬紫滴:

大家應該注意到了,views文件夾下的並非是平常所見的.html文件,而是.ejs文件,於是就需要我們自己來把它默認的引擎從EJS改成HTML,修改的操作就是打開app.js文件,然後將其中一段代碼注釋掉並修改成如下:

// view engine setup
// app.set('views', path.join(__dirname, 'views'));
// app.set('view engine', 'ejs');

//注釋掉默認的,自己手動修改默認引擎
app.set('views', path.join(__dirname, 'views'));
var template = require('art-template');
template.config('base', '');
template.config('extname', '.html');
app.engine('.html', template.__express);
app.set('view engine', 'html');

然後將原有默認的兩個.ejs文件刪掉,並創建相應的.html文件,在這個小demo中,鑒於自己所需的,故重新建好的文件目錄是醬紫滴:

2.數據庫准備:

打開Navicat客戶端,新建一個數據庫,腳本如下:

create database testdb;
use testdb;
create table userinfo(
 id                                        int not null auto_increment,
 name                                  varchar(20) not null,
age                                      int not null,
primary key (id)          
)

這樣我們所需的數據庫就有了。

接著就是將項目和此數據庫連接起來——在剛才新建的db.js中,來實現連接數據庫:

//db.js

/** * Created by Administrator on 2016/7/19. */ // 連接MySQL var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'root', database: 'testdb' }); function query(sql, callback) { pool.getConnection(function (err, connection) { // Use the connection connection.query(sql, function (err, rows) { callback(err, rows); connection.release();//釋放鏈接 }); }); } exports.query = query;

我是將代碼寫在users.js中,而默認的index中就都沒有寫任何代碼,於是完整的代碼如下:

①users.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{title}}</title>
</head>
<body>
<form action="/users/search" method="post">
    姓名:<input type="text" name="s_name" value="{{s_name}}"><br>
    年齡:<input type="text" name="s_age" value="{{s_age}}"><br>
    <input type="submit" value="查詢">
</form>

<table>
    <tr>
        <th>編號</th>
        <th>姓名</th>
        <th>年齡</th>
        <th>操作</th>
    </tr>
    {{each datas as value index}}
    <tr>
        <td>{{value.id}}</td>
        <td>{{value.name}}</td>
        <td>{{value.age}}</td>
        <td><a href="/users/add">新增</a></td>
        <td><a href="/users/del/{{value.id}}">刪除</a></td>
        <td><a href="/users/toUpdate/{{value.id}}">修改</a></td>
    </tr>
    {{/each}}
</table>
</body>
</html>

②add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>新增頁面</title>
</head>
<body>
<form action="/users/add" method="post">
    姓名:<input type="text" name="name"><br>
    年齡:<input type="text" name="age"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

③update.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改頁面</title>
</head>
<body>
<form action="/users/update" method="post">
    <input type="hidden" value="{{datas[0].id}}" name="id">
    姓名:<input type="text" name="name" value="{{datas[0].name}}"><br>
    年齡:<input type="text" name="age" value="{{datas[0].age}}"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

④user.js

var express = require('express');
var router = express.Router();
//引入數據庫包
var db = require("./db.js");

/* GET users listing. */
// router.get('/', function(req, res, next) {
//   res.send('respond with a resource');
// });

/**
 * 查詢列表頁
 */
router.get('/', function (req, res, next) {
    db.query('select * from userinfo', function (err, rows) {
        if (err) {
            res.render('users', {title: 'Express', datas: []});  // this renders "views/users.html"
        } else {
            res.render('users', {title: 'Express', datas: rows});
        }
    })
});
/**
 * 新增頁面跳轉
 */

router.get('/add', function (req, res) {
    res.render('add');
});
router.post('/add', function (req, res) {
    var name = req.body.name;
    var age = req.body.age;
    db.query("insert into userinfo(name,age) values('" + name + "'," + age + ")", function (err, rows) {
        if (err) {
            res.end('新增失敗:' + err);
        } else {
            res.redirect('/users');
        }
    })
});

/**
 * 刪
 */
router.get('/del/:id', function (req, res) {
    var id = req.params.id;
    db.query("delete from userinfo where id=" + id, function (err, rows) {
        if (err) {
            res.end('刪除失敗:' + err)
        } else {
            res.redirect('/users')
        }
    });
});
/**
 * 修改
 */
router.get('/toUpdate/:id', function (req, res) {
    var id = req.params.id;
    db.query("select * from userinfo where id=" + id, function (err, rows) {
        if (err) {
            res.end('修改頁面跳轉失敗:' + err);
        } else {
            res.render("update", {datas: rows});       //直接跳轉
        }
    });
});
router.post('/update', function (req, res) {
    var id = req.body.id;
    var name = req.body.name;
    var age = req.body.age;
    db.query("update userinfo set name='" + name + "',age='" + age + "' where id=" + id, function (err, rows) {
        if (err) {
            res.end('修改失敗:' + err);
        } else {
            res.redirect('/users');
        }
    });
});
/**
 * 查詢
 */
router.post('/search', function (req, res) {
    var name = req.body.s_name;
    var age = req.body.s_age;

    var sql = "select * from userinfo";

    if (name) {
        sql += " and name='" + name + "' ";
    }

    if (age) {
        sql += " and age=" + age + " ";
    }
    sql = sql.replace("and","where");
    db.query(sql, function (err, rows) {
        if (err) {
            res.end("查詢失敗:", err)
        } else {
            res.render("users", {title: 'Express', datas: rows, s_name: name, s_age: age});
        }
    });
});


module.exports = router;

效果展示:

1.剛打開頁面的時候,由於數據庫沒有數據,因此頁面效果是醬紫滴:

默認端口號是3000,由於我的3000被占用,因此在bin/www中修改端口號;

2.完整的頁面效果是醬紫滴:

其中,新增、刪除以及修改也是可以正常使用的。

到此,簡單的使用nodejs+express+MySQL的crud小demo就完成了。每次多學一點知識的時候,總是少不了好同事的幫忙

下面關於Node.js的內容你可能也喜歡

在 Ubuntu 14.04/15.04 上安裝配置 Node.js v4.0.0 http://www.linuxidc.com/Linux/2015-10/123951.htm

如何在CentOS 7安裝Node.js http://www.linuxidc.com/Linux/2015-02/113554.htm

Ubuntu 14.04下搭建Node.js開發環境 http://www.linuxidc.com/Linux/2014-12/110983.htm

Ubunru 12.04 下Node.js開發環境的安裝配置 http://www.linuxidc.com/Linux/2014-05/101418.htm

Node.Js入門[PDF+相關代碼] http://www.linuxidc.com/Linux/2013-06/85462.htm

Node.js開發指南 高清PDF中文版 +源碼 http://www.linuxidc.com/Linux/2014-09/106494.htm

Node.js入門開發指南中文版 http://www.linuxidc.com/Linux/2012-11/73363.htm

Ubuntu 編譯安裝Node.js http://www.linuxidc.com/Linux/2013-10/91321.htm

Ubuntu 16.04 64位 搭建 Node.js NodeJS 環境 http://www.linuxidc.com/Linux/2016-09/135487.htm

Node.js 的詳細介紹:請點這裡
Node.js 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved