应用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 ...
随机推荐
- 创建 Django 步骤
1.创建项目 django-admin startproject 项目名称 2.创建APP python manage.py startapp app名称 3.修改settings.py文件 3.1设 ...
- python-for循环与while循环
while 循环 格式: while 条件 为 True: 代码块 while True: rayn_age = 18 age = input('请输入你的年龄:') age = int(age) i ...
- [译]The Python Tutorial#4. More Control Flow Tools
[译]The Python Tutorial#More Control Flow Tools 除了刚才介绍的while语句之外,Python也从其他语言借鉴了其他流程控制语句,并做了相应改变. 4.1 ...
- PTA 7-1 银行业务队列简单模拟
用链表实现队列操作,代码如下: #include <iostream> #include <cstdio> #include <algorithm> #includ ...
- Linux学习-Linux 的开机流程分析
开机流程一览 系统开机的经过可以汇整成底下的流程的: 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置; 读取并执行第一个开机装置内 MBR 的 boot Loader (亦 ...
- Android开发工具——Android Studio调试技巧
.调试的两种方式 到目前,调试的相关基础我们已经介绍完了,但是不少同学对Android Studio中这两个按钮感到困惑:Debug和Attach process. 这里我们就简单介绍一下这两者的区别 ...
- linux的vi和vim编辑器操作
vi:linux内部的文本编辑器:vim:vi的增强版,具有程序编辑的能力. vi和vim的三种常见模式: (1)正常模式(一般模式):vim一打开就是这种模式,此模式下可以使用各种快捷键,比如复制粘 ...
- C#通过http post方式调用需要证书的webservice
前一段时间做花旗银行的项目,用到花旗的接口是websevice,由于很多原因直接在项目中引用webservice不成功,于是就用了http post方式请求,把请求信息(xml格式)组装之后发送到服务 ...
- ogre3D学习基础11 -- 交换两个场景管理器
这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...
- Selenium WebDriver-判断页面中某一元素是否已经显示,通常用于断言
判断界面中某一元素是否已经呈现,多用于断言,代码如下: #encoding=utf-8 import unittest import time from selenium import webdriv ...