接着上一篇的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. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  2. rails下自动更新静态文件的gem包

    https://github.com/guard/guard-livereload gemfile group :development do gem 'guard-livereload', '~&g ...

  3. 集合Collection

    /* * 集合的由来: * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. * 而要想存储多个对象,就不能是一个基本 ...

  4. 一个github账户多台电脑代码提交

    在实际工作生活中,我们可能不一定仅仅在一台电脑上编码,比如:我们平时在单位电脑1上写代码,提交代码到github账户,而我们也可能会在在家里的电脑2上继续工作,提交代码,这样就是在不同的电脑上提交代码 ...

  5. nginx响应时间监控脚本

    最近我们服务的使用方总是反应说我们接口超时,于是做了一个监控脚本,统计最近五分钟的响应情况,并对异常情况发送邮件报警. #!/bin/bash function define(){ ori_log_p ...

  6. 本地新建项目提交到github

    1.在github上创建项目(可以添加README.md),创建后的地址为 https://github.com/xxx/xxx-demo.git 2.在eclipse上新建个quick-start的 ...

  7. C#如何获取CPU处理器核心数量 z

    有几条不同的处理器信息,您可以获得有关的信息:物理处理器数量.核心数量和逻辑处理器数量,这些可以不同.两颗双核超线程(启用)处理器的机器情况下有:2个物理处理器.4个核心和8个逻辑处理器. 逻辑处理器 ...

  8. C#封装好的Win32API

    Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...

  9. url-pattern

    一,servlet容器对url的匹配过程: 当 一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是 http://lo ...

  10. JavaScript的学习2

      1. a.字符串运算符 符号 功能 + 字符串连接 += 将左边的值加上右边的值然后再赋值给左边的变量 b.比较运算符 运算符 含义 说明 > 大于 M>N,当M大于N时,返回TRUE ...