接着上一篇的php+mysql,我们来试一试nodejs怎么实现数据的增删查改。

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。我们需要的很多工具都可以直接用npm下载安装,比如前端工业化框架gulp,grunt,fis等,还有css的预处理语言less,都可以在cmd使用npm安装使用。这个以后专开一篇博客介绍。

回到nodejs,首先怎么安装,我们直接在nodejs的官网或者中文网下载一个稳定版本的安装包就行了,需要注意的是最好安装在默认目录,不然windows系统需要修改环境变量,mac没有用过,请自行百度。

安装完成以后在桌面新建一个文件夹,进入:

C:\Users\Admin>cd Desktop
C:\Users\Admin\Desktop>mkdir nodejstest
C:\Users\Admin\Desktop>cd nodejstest

在这个目录下使用exoress快速创建一个框架,本次我们只需要安装ejs,如果需要模板引擎的话,可以根据需要安装,具体命令参见http://www.expressjs.com.cn/starter/generator.html。

然后使用npm install执行安装。

C:\Users\Admin\Desktop\nodejstest>express -e

C:\Users\Admin\Desktop\nodejstest>npm install

这时候刚刚创建的文件夹下面就生成了一些文件,我们把我们的html,css等文件替换到public中。

执行一下:

C:\Users\Admin\Desktop\nodejstest>npm start

然后在浏览器中访问http://localhost:3000/  就可以看到默认的index.html,或者在他后面加上我们想访问的html。

这个时候数据库并没有连接,我们可以看到页面报错。

执行下面的命令把数据库安装到当前的工程:

C:\Users\Admin\Desktop\nodejstest>npm install mysql --save-dev

想要了解更多可以去npm的官网搜索一下mysql,里面会有详细的讲解。

安装完成后就可以使用他来连接之前的数据库了,打开xampp,开启Mysql。

下面修改代码:

把刚才的文件夹拖到编辑器,先看一下生成的app.js:

我们可以看到他建立了两个路由:

var routes = require('./routes/index');
var users = require('./routes/users');

一个作为用户端,一个作为服务端。

还建立了两个请求:

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

我们修改一下:

app.use('/news', routes);
app.use('/admin', users);

这两句表示,监听3000端口,当获取到发往news的请求时,就进入到routes/index.js中。当获取到发往admin的请求时,就进入到routes/users.js中。

在我们之前的js文件中,将ajax的url修改掉,比如:

    //获取
$.ajax({
url: "/news",
type: "get",
datatype: "json",
data:{"newstype":newsType},
success: function(data) {
...
},
error: function(){
console.log('error');
}
});
//增加
$.ajax({
url: "/admin/insert",
type: "post",
data: jsonNews,
datatype: "json",
success: function(data) {
...
},
error: function(XHR, textStatus, errorThrown) {
console.log(textStatus + "ready:" + XHR.readyState);
}
});
//删除
$.ajax({
url: "/admin/delete",
type: "post",
data: { "newsid": deleteId },
success: function() {
...
},
error:function(xhr,status){
console.log(status);
}
});
//修改获取和提交:
$.ajax({
url: "/admin/curnews",
type: "get",
datatype: "json",
data: { "newsid": updateId },
success: function(data) {
...
}
});
$.ajax({
url: "/admin/update",
type: "post",
data: {
"newstitle": $("#unewsTitle").val(),
"newstype": $("#unewsType").val(),
"newsimg": $("#unewsImg").val(),
"newstime": $("#unewsTime").val(),
"newssrc": $("#unewsSrc").val(),
"id": updateId
},
success: function(data) {
...
}
});

其他内容不变,不再赘述,参见上一篇博客 http://www.cnblogs.com/weirihan/p/6137741.html。

接下来就是服务器函数,我们在routes下面的js文件中写对应的函数替代之前用php写的server。

仍旧可以创建一个db.js来连接数据库:

var mysql = require('mysql');

var connection = mysql.createPool({
host: 'localhost',
port: 3306,
user: 'name',
password: 'pwd',
database: 'testabc'
}); connection.getConnection(function(err,connection){
if(err){
console.log("connection false");
}
}); exports.connection=connection;

在index.js中,获取数据:

var express = require('express');
var router = express.Router();
var db = require('./db.js'); /* 在主页获取数据时的请求. */
router.get('/', function(req, res, next) {
var newstype = req.query.newstype; db.connection.query('SELECT * FROM `news` WHERE `newstype` = ?',[newstype],function(err,rows,fields){
res.json(rows);
})
}); module.exports = router;

在user.js中:

增加(这里加了一个重复校验):

/*insert*/
router.post('/insert', function(req, res) {
var newstime = req.body.newstime,
newstype = req.body.newstype,
newstitle = req.body.newstitle,
newsimg = req.body.newsimg,
newssrc = req.body.newssrc;
var thistitle = null;
var count = 0; /*获取与新增的title一样的数据数目:*/
db.connection.query('select count(0) as count from news where newstitle=?', [newstitle], function(err, rows) {
rows.forEach(function(e) {
count = e.count;
//console.log("##count = " + count);
});
/*有重复:*/
if (count > 0) {
res.json({ "success": "alreadyhad" });
} else {
db.connection.query('INSERT INTO `news` (`newstitle`,`newstype`,`newsimg`,`newstime`,`newssrc`) VALUES (?,?,?,?,?)', [newstitle, newstype, newsimg, newstime, newssrc], function(err, result) {
if (!err) {
//console.log(result.insertId);
res.json({ "delete": "success" });
} else {
res.json({ "delete": "fail" });
}
});
}
});
});

修改:

/*模态框取值*/
router.get('/curnews', function(req, res) {
var newsid = req.query.newsid;
db.connection.query('SELECT *FROM `news` WHERE id=?', [newsid], function(err, rows) {
res.json(rows);
})
}); /*确认更新*/
router.post('/update', function(req, res) {
var newsid = req.body.id,
newstype = req.body.newstype,
newstitle = req.body.newstitle,
newsimg = req.body.newsimg,
newstime = req.body.newstime,
newssrc = req.body.newssrc; var thistitle = null;
var count = 0; db.connection.query('SELECT *FROM `news` WHERE id=?', [newsid], function(err, rows) {
rows.forEach(function(e) {
thistitle = e.newstitle;
//console.log("##thistitle = " + thistitle);
});
/*获取与修改的title一样的数据数:*/
db.connection.query('select count(0) as count from news where newstitle=?', [newstitle], function(err, rows) {
rows.forEach(function(e) {
count = e.count;
//console.log("##count = " + count);
});
/*有重复且不是本身:*/
if ((count > 0) && (newstitle != thistitle)) {
res.json({ "success": "alreadyhad" });
} else {
db.connection.query('UPDATE `news` SET `newstitle`=?,`newstype`=?,`newsimg`=?,`newstime`=?,`newssrc`=? WHERE `id`=?', [newstitle, newstype, newsimg, newstime, newssrc, newsid], function(err, rows) {
if (err) {
res.json({ "update": "fail" });
}else{
res.json({ "update": "success" });
} });
}
});
});
});

删除:

/*delete*/
router.post('/delete', function(req, res) {
var newsid = req.body.newsid;
db.connection.query('DELETE FROM `news` WHERE `news`.`id`=?', [newsid], function(err, result) {
//console.log(result.affecteRows);
if (!err) {
res.json({ "delete": "success" });
} else {
res.json({ "delete": "fail" });
}
});
});

以上就是nodejs+mysql实现数据库增删查改。

endding~

nodejs+mysql的更多相关文章

  1. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  2. nodejs mysql 创建连接池

    用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...

  3. nodejs mysql 操作数据库方法一详解

    nodejs mysql 数据查询例子 时间 2014-11-11 15:28:01  姜糖水原文  http://www.cnphp6.com/archives/59864 1.安装nodejs 2 ...

  4. nodejs+mysql 断线重连

    var mysql = require('mysql'); var conn; function handleError () { conn = mysql.createConnection({ ho ...

  5. Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

    [TOC] 1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list ...

  6. 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  7. nodejs mysql 数据查询例子

    1.安装nodejs 2.安装mysql  npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...

  8. [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  9. nodejs MySQL操作

    一  wamp创建数据库 选择phpMyAdmin 选择用户,添加用户 填写数据库详细资料,填写完毕选择右下角的“执行” 用户添加成功 2. nodejs 安装mysql驱动  npm install ...

随机推荐

  1. ASP.NET: 正在中止线程 错误原及解决方法

    #[操作记录]:2010-02-23 9:25:12  System.Threading.ThreadAbortException: 正在中止线程. 症状 如果使用 Response.End.Resp ...

  2. maven 记录

    1. Can't find parent:  工程中的pom.xml中定义的”project -> version”或者”parent project -> version”设置的不对导致 ...

  3. js声明json数据,打印json数据,遍历json数据

    1.js声明json数据: 2.打印json数据: 3.遍历json数据 //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿对象型) json['b'] = ...

  4. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)

    I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...

  5. 彻底解决rman恢复碰到ora-01152错

    说说碰到这个问题的背景.使用NBU调脚本对oracle进行备份.脚本如下:RUN {ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';ALLOCATE CHANNEL ch0 ...

  6. (Array)169. Majority Element

    Given an array of size n, find the majority element. The majority element is the element that appear ...

  7. oracleclient连oracle库 报System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本

    在iis下发布eworkflow+eform+ebiao的代码,访问oracle的数据库,用oracleClient或者oledb的方式连接,有时会报“System.Data.OracleClient ...

  8. Android Studio 修改字体

    修改字体(font)大小(size)   本文引用: http://blog.csdn.net/caroline_wendy/article/details/21876727   Android St ...

  9. Manually enable Appear Offline in Lync 2013 Preview via Registry

    refer to http://www.shudnow.net/2012/09/18/manually-enable-appear-offline-in-lync-2013-preview-via-r ...

  10. 推荐几个最好用的CRM软件,本人亲测

    CRM是英文Customer Relationship Management 的简写,一般译作“客户关系管理”.CRM最早产生于美国,由Gartner Group 首先提出的CRM这个概念的.20世纪 ...