nodejs+express+mysql实现restful风格的增删改查示例
2018-01-16 23:55
926 查看
首先,放上项目github地址:https://github.com/codethereforam/express-mysql-demo
下面来内容自于项目的README。
node.js
express
前端技术
angular.js
mysql: https://dev.mysql.com/doc/refman/5.7/en/installing.html
新建express-mysql-demo数据库,导入project-datamodel文件夹下的user.sql
修改conf/mysqlConf.js中数据库配置信息
启动
打开首页: http://localhost:8888
理解RESTful架构
RESTful API 设计指南
我使用的IDE是IDEA,安装"NodeJS"插件后依次点击
IDEA默认使用express-generator生成项目结构。
新建数据库"express-mysql-demo":
新建user表:
表结构:
mysql配置文件conf/mysqlConf.js:
SQL语句封装模块dao/userSqlMap.js:
封装返回结果对象model/result.js:
我这里使用了工厂方法创建结果对象,对象有两个属性,success代表用户操作成功或失败,data存放后台要返回的数据。
下面分析修改用户部分信息的相关代码,全部的增删改查代码请将项目clone下来查看。
封装和数据库的交互模块dao/userDAO.js:
这里使用了连接池,重复使用数据库连接,而不必每执行一次CRUD操作就获取、释放一次数据库连接,从而提高了对数据库操作的性能。
用户操作路由及实现业务逻辑routes/users.js:
router根据不同的HTTP请求方法和访问路径执行相应的回调函数,回调函数中先记录日志,然后检查用户传过来的数据,接着调用userDAO的相应CRUD方法,最后返回一个JSON对象给前端。这里修改用户部分信息对应HTTP方法是PATCH,而修改全部信息对应的是PUT。
应用配置app.js中配置用户操作相关的路由:
前端public/index.html中与后台交互的JS代码:
前端使用angualr.js,ajax异步调用后端restful API,然后解析后台返回的JSON对象在界面上展示。
一、前言
之前学的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
三、环境搭建
node.js: https://nodejs.org/en/download/package-manager/mysql: https://dev.mysql.com/doc/refman/5.7/en/installing.html
四、项目运行
下载代码并部署git clone https://github.com/codethereforam/express-mysql-demo.git cd express-mysql-demo && npm install #安装部署依赖的包
新建express-mysql-demo数据库,导入project-datamodel文件夹下的user.sql
修改conf/mysqlConf.js中数据库配置信息
启动
# 切换到项目根路径 npm start
打开首页: http://localhost:8888
五、开发过程及代码分析
关于restful,可参考阮一峰的两篇文章:理解RESTful架构
RESTful API 设计指南
我使用的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对象在界面上展示。
相关文章推荐
- 进入全屏 nodejs+express+mysql实现restful风格的增删改查示例
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
- 实现一个完整的Node.js RESTful API的示例
- node+express+mysql实现简单的数据增删改查
- Node.js 连接Mysql的增删改查操作简单例子
- nodejs+express+mysql 增删改查(二)
- nodejs+express+mysql 增删改查
- 用Node.js实现Restful风格webservice
- angularJs实现增删改查示例2-JS文件
- 130行实现Express风格的Node.js框架
- nodejs+Express实现Restful的web应用
- 基于Node.js+express+MySQL+Bootstrap实现的简单登录注册
- 用Node.js实现基于https的Restful风格webservice
- Node+Express+node-mysql 实战于演习 全套mysql(增删改查)
- 使用spring boot 整合spring jpa做基于restful风格的增删改查(maven ,mysql)
- node.js操作mysql(增删改查)
- Node.js+Express+MySql实现用户登录注册
- NodeJs+Express实现简单的Web增删改查
- Node.js实现RESTful api,express or koa?
- 从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例