应用node+express+mysql 实现简单的增删改查
记录下来备忘
1、准备好webstrom编辑器,编辑器调整字体大小等在file->settings->editor下设置 注册码 来源网上:
2017.2.27更新
选择“license server” 输入:http://idea.imsxm.com/
2、准备好 mysql 因为我本机有安装xampp 所以不需要单独准备mysql数据库 如果没有需要安装,安装了mysql的Navicat Premium管理工具。
3、查看下本机node和express是否安装 版本node -v express --version
4 、打开webstrom新建工程File->New->Project->nodejs

手动更改views下支持的模板文件格式,现在views下都是ejs文件,修改 app.js
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');
这期中有个坑,安装art-template 需要安装art-template 3.0.3 默认安装4以上版本 会出现template.config不是函数的错误
可能art-template 4 换其他的方法了。

新建数据库 略过

在routes下新建db.js 连接数据库
//db.js
//连接mysql
var mysql = require('mysql');
var pool = mysql.createPool({
host:'localhost',
user:'root',
password:'',
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;
在views下新建users.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>
<body>
<form method="post" action="/users/search">
姓名:<input type="text" value="{{s_name}}" name="s_name">
年龄:<input type="text" value="{{s_age}}" name="s_age">
<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>
在routes下新建user.js
var express = require('express');
var router = express.Router();
var db = require('./db.js');
/* GET users listing. */
router.get('/', function(req, res, next) {
db.query('select * from userinfo',function(err,rows){
if(err){
res.render('users',{title:'Express',datas:[]});
}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("新增失败");
}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;
新增页面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>
可以简单遍历数据库字段到页面。

参考 http://www.cnblogs.com/zhengyeye/p/nodejs.html 感谢原作者
应用node+express+mysql 实现简单的增删改查的更多相关文章
- 使用 NodeJS+Express+MySQL 实现简单的增删改查
关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...
- 利用Express+MySQL进行简单的增删改查
前言: 随着JavaScript语言的快速发展,其功能越来越强大,能做的事情也越来越多. 目前,web前端工程师能够利用NodeJS搭建服务,也成为了越来越多互联网公司对前端开发的硬性要求. 本文主要 ...
- python操作三大主流数据库(2)python操作mysql②python对mysql进行简单的增删改查
python操作mysql②python对mysql进行简单的增删改查 1.设计mysql的数据库和表 id:新闻的唯一标示 title:新闻的标题 content:新闻的内容 created_at: ...
- 基于nodejs+express+mysql+webstorm+html的 增删改查
一.工具准备 Nodejs框架,WebStorm.Mysql服务.Navicat.此篇文章只讲项目的搭建过程,至于Nodejs,WebStorm.Mysql的下载.安装与配置网上资源很多,请自行查阅, ...
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
- mysql实现简单的增删改查,放入xmapp自带数据库中
1.mysql概念:SQL-Structured Query Language,是一种特殊的语言,专用于操作关系型数据库服务器中的数据,所有的SQL语句分为四类: (1)DDL(2)DQL(3)DML ...
- python之MySQL学习——简单的增删改查封装
1.增删改查封装类MysqlHelper.py import pymysql as ps class MysqlHelper: def __init__(self, host, user, passw ...
- 通过JDBC进行简单的增删改查(以MySQL为例) 目录
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- Java通过JDBC进行简单的增删改查(以MySQL为例)
Java通过JDBC进行简单的增删改查(以MySQL为例) 目录: 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JD ...
随机推荐
- 基于Nodejs的爬虫
简介 基于 Node.JS 爬取 博客园 1W+博文,对博文内容做关键词提取,生成词云. 演示 安装 安装 git.Node.JS.MongoDB.Yarn 克隆代码 git clone git@gi ...
- 01_5_Struts_ActionMethod_DMI_动态方法调用
01_5_Struts_ActionMethod_DMI_动态方法调用 1. ActionMethod_DMI_动态方法调用 Action执行的时候并不一定要执行execute()方法 可以在配置文件 ...
- iOS 导航栏遮挡问题 --- iOS开发系列 ---项目中成长的知识七
不知大家有没有遇见过自己写的tableview被导航栏遮挡住的问题,反正我是遇见过! 因为在ios7以后所有的UIViewController创建后默认就是full Screen的,因此如果带导航栏的 ...
- iOS中的数据存储方式_Preference(NSUserDefaults)
NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...
- 【转】C++中map容器的说明和使用技巧
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> ...
- 【转】EM算法原理
EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了.在Mitchell的书中也提到EM可以用于贝叶 ...
- CentOS7系统引导顺序以及排障
引导顺序 UEFi或BIOS初始化,运行POST开机自检 选择启动设备 引导装载程序, centos7是grub2 加载装载程序的配置文件:/etc/grub.d/ /etc/default/gru ...
- 04Windows中的字符类型
1. Windows 中常用的数据类型定义 //WinNt.h中定义 typedef unsigned short wchar_t; //A 16-bit character typedef char ...
- Python3学习了解日记
# 单行注释 ''' 多行注释 ''' """ 这个也是多行注释 """ ''' 声明变量 Python 中的变量不需要声明.每个变量在使用 ...
- 用Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
一.用默认设置绘制折线图 import matplotlib.pyplot as plt x_values=list(range(11)) #x轴的数字是0到10这11个整数 y_values=[x* ...