首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo

一、前言

之前学的java,一直用的ssm框架写后台。前段时间接触到node.js,于是花了两天时间学了一下node.js并写了一个CRUD简单示例。由于前几天一直学用github pages搭建博客,一直没时间写README,今天有空补了上来。

下面来内容自于项目的README。

二、项目介绍

基于node.js + express + mysql实现的restful风格的CRUD简单示例

2.1 组织结构

├── app.js -- 应用配置
├── bin
│ └── www -- 项目运行脚本
├── conf
│ └── mysqlConf.js -- mysql配置文件
├── dao
│ ├── userDAO.js -- 封装和数据库的交互
│ └── userSqlMap.js -- SQL语句封装
├── model
│ └── result.js -- 返回结果对象封装
├── package.json -- 依赖模块
├── project-datamodel
│ └── user.sql -- 数据库脚本
├── public -- 前端静态页面
│ ├── add.html
│ ├── css
│ │ └── style.css
│ ├── detail.html
│ ├── index.html
│ └── modify.html
└── routes
└── users.js -- 用户操作路由及业务逻辑

2.2 模块依赖

www -> app.js -> users.js ->  userDAO.js -> mysqlConf.js & userSqlMap.js

2.3 技术选型

后端技术

  • node.js
  • express

前端技术

  • angular.js

三、环境搭建

四、项目运行

  1. 下载代码并部署
git clone https://github.com/codethereforam/express-mysql-demo.git
cd express-mysql-demo && npm install #安装部署依赖的包
  1. 新建express-mysql-demo数据库,导入project-datamodel文件夹下的user.sql

  2. 修改conf/mysqlConf.js中数据库配置信息

  3. 启动

# 切换到项目根路径
npm start
  1. 打开首页: http://localhost:8888

五、开发过程及代码分析

关于restful,可参考阮一峰的两篇文章:

我使用的IDE是IDEA,安装"NodeJS"插件后依次点击

File -> New Project -> Node.js and NPM -> Node.js Express App

IDEA默认使用express-generator生成项目结构。

新建数据库"express-mysql-demo":

create database `express-mysql-demo`;

新建user表:

CREATE TABLE `express-mysql-demo`.`user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(45) NOT NULL,
`password` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`))
DEFAULT CHARACTER SET = utf8mb4;

表结构:

+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(45) | NO | | NULL | |
| password | varchar(45) | NO | | NULL | |
+----------+------------------+------+-----+---------+----------------+

mysql配置文件conf/mysqlConf.js:

module.exports = {
mysql: {
host: 'localhost',
user: 'root',
password: '',
database:'express-mysql-demo',
// 最大连接数,默认为10
connectionLimit: 10
}
};

SQL语句封装模块dao/userSqlMap.js:

var userSqlMap = {
add: 'insert into user(username, password) values(?, ?)',
deleteById: 'delete from user where id = ?',
update: 'update user set username=?, password=? where id=?',
list: 'select * from user',
getById: 'select * from user where id = ?'
};

封装返回结果对象model/result.js:

exports.createResult = function(success, data) {
var result = {};
result.success = success;
result.data = data;
return result;
};

我这里使用了工厂方法创建结果对象,对象有两个属性,success代表用户操作成功或失败,data存放后台要返回的数据。

下面分析修改用户部分信息的相关代码,全部的增删改查代码请将项目clone下来查看。

封装和数据库的交互模块dao/userDAO.js:

var pool = mysql.createPool(mysqlConf.mysql);
module.exports = {
getById: function (id, callback) {
pool.query(userSqlMap.getById, id, function (error, result) {
if (error) throw error;
console.log(result[0]);
callback(result[0]);
});
},update: function (user, callback) {
pool.query(userSqlMap.update, [user.username, user.password, user.id], function (error, result) {
if (error) throw error;
callback(result.affectedRows > 0);
});
}
};

这里使用了连接池,重复使用数据库连接,而不必每执行一次CRUD操作就获取、释放一次数据库连接,从而提高了对数据库操作的性能。

用户操作路由及实现业务逻辑routes/users.js:

/* patch users */
router.patch('/:id', function (req, res) {
console.log('patch users called');
userDAO.getById(req.params.id, function (user) {
var username = req.body.username;
if(username) {
user.username = username;
}
var password = req.body.password;
if(password) {
user.password = password;
}
console.log(user);
userDAO.update(user, function (success) {
var r = result.createResult(success, null);
res.json(r);
});
});
});

router根据不同的HTTP请求方法和访问路径执行相应的回调函数,回调函数中先记录日志,然后检查用户传过来的数据,接着调用userDAO的相应CRUD方法,最后返回一个JSON对象给前端。这里修改用户部分信息对应HTTP方法是PATCH,而修改全部信息对应的是PUT。

应用配置app.js中配置用户操作相关的路由:

app.use('/users', users);

前端public/index.html中与后台交互的JS代码:

(function (window) {
window.angular.module('list', [])
.controller('listCtrl', function ($scope, $http) {
$scope.doPatch = function (id) {
var data = JSON.stringify({
password: document.getElementById("pwd" + id).value
});
$http.patch("/users/" + id, data)
.then(function (response) {
console.debug(response.data.success);
}, function (err) {
alert(err);
});
};
});
})(window);

前端使用angualr.js,ajax异步调用后端restful API,然后解析后台返回的JSON对象在界面上展示。

版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者thinkam和本文原始地址或出处:
http://www.cnblogs.com/thinkam | https://codethereforam.github.io

进入全屏 nodejs+express+mysql实现restful风格的增删改查示例的更多相关文章

  1. nodejs+express+mysql实现restful风格的增删改查示例

    首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo 一.前言 之前学的java,一直用的ssm框架写后台.前段时间 ...

  2. Nodejs+Express+Mysql实现简单用户管理增删改查

    源码地址 https://github.com/king-y/NodeJs/tree/master/user 目录结构 mysql.js var mysql = require('mysql'); v ...

  3. node+express+mysql实现简单的数据增删改查

    前提 电脑已经安装了node,express,mysql. 实现步骤 1.新建数据库表 附数据表结构: 2.创建exprss项目 express -e myapp  新建一个以ejs为模板的expre ...

  4. SpringMVC 之 RESTful 风格的增删改查

    1. 视图和视图解析器 视图解析器 请求处理方法执行完成后,最终返回一个ModelAndView对象,对于返回String,View 或 ModelMap 等类型的处理方法, SpringMVC 也会 ...

  5. 使用JDBC分别利用Statement和PreparedStatement来对MySQL数据库进行简单的增删改查以及SQL注入的原理

    一.MySQL数据库的下载及安装 https://www.mysql.com/ 点击DOWNLOADS,拉到页面底部,找到MySQL Community(GPL)Downloads,点击 选择下图中的 ...

  6. MySQL数据库之表的增删改查

    目录 MySQL数据库之表的增删改查 1 引言 2 创建表 3 删除表 4 修改表 5 查看表 6 复制表 MySQL数据库之表的增删改查 1 引言 1.MySQL数据库中,数据库database就是 ...

  7. MYSQL - database 以及 table 的增删改查

    MYSQL - database 以及 table 的增删改查 MySQL的相关概念介绍 MySQL 为关系型数据库(Relational Database Management System), 这 ...

  8. Mysql数据库和表的增删改查以及数据备份&恢复

    数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...

  9. MySQL数据库 | 数据表的增删改查

    MySQL数据的增删改查(crud) 本文结构 一.增加 create 二.修改 update 三.查询 retrieve(简单查询,下篇详细展开) 四.删除 delete 首先,创建简单的class ...

随机推荐

  1. C语言程序读写文件(文件内存一个十进制数,每读一次数值加一)

    1.问题:C语言程序实现读写一个txt文件,txt文件中存储一个十进制数.每读一次该数值加一. 2.实现:新建一个文件夹,在该文件夹中建一个outputFileName.txt文件.内容是:1,再在该 ...

  2. ECharts-热力图实例

    1.引入echarts.js 2.页面js代码 //用ajax获取所需要的json数据 $.get("../../../mall/queryPageWtSrPost.do", { ...

  3. poj3233Matrix Power Series(矩阵乘法)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 23187   Accepted: ...

  4. idea导入ssm项目启动tomcat报错404

    用idea写ssm项目,基于之前一直在用spring boot  对于idea如何运行ssm花费了一番功夫 启动Tom act一直在报404 我搜了网上各种解决办法都不行,花费一天多的时间解决不了 就 ...

  5. Linux 安装配置JDK 、 MySQL 、nginx

    今天我来讲一下在Linux下各环境的搭建,主要就讲一下jdk.MySQL.和一个代理服务器nginx 1. jdk的安装配置 1)卸载自带openjdk 当我们拿到一个全新的ECS的时候上面有的会自带 ...

  6. POJ 1172 DFS

    (感谢wzc学长的幻灯片) 单组数据 注意从必经点能到标记过的点则此点不是分裂点. //By: Sirius_Ren #include <cstdio> #include <queu ...

  7. 06-联系人管理(xib应用)

    ViewController.h文件中: @interface ViewController : UIViewController - (IBAction)add:(UIBarButtonItem * ...

  8. Javascrpt核心概念(2)--操作符

    学习操作符这个章节最好回忆一下C里的惯例,因为ECMAScript的标准很多继承自C的语法 一元操作符 只能操作一个值得操作符 递增和递减操作符 var age = 29; ++age; //30 v ...

  9. android黑科技系列——分析某直播App的协议加密原理以及调用加密方法进行协议参数构造

    一.前言 随着直播技术火爆之后,各家都出了直播app,早期直播app的各种请求协议的参数信息都没有做任何加密措施,但是慢慢的有人开始利用这个后门开始弄刷粉关注工具,可以让一个新生的小花旦分分钟变成网红 ...

  10. 【SQL】ROWNUM和ROWID

    一.ROWNUM ROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的. SQL> select r ...