接着上一篇的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没有用过,请自行百度。

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

  1. C:\Users\Admin>cd Desktop
  2. C:\Users\Admin\Desktop>mkdir nodejstest
  3. C:\Users\Admin\Desktop>cd nodejstest

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

然后使用npm install执行安装。

  1. C:\Users\Admin\Desktop\nodejstest>express -e
  2.  
  3. C:\Users\Admin\Desktop\nodejstest>npm install

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

执行一下:

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

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

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

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

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

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

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

下面修改代码:

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

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

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

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

还建立了两个请求:

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

我们修改一下:

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

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

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

  1. //获取
  2. $.ajax({
  3. url: "/news",
  4. type: "get",
  5. datatype: "json",
  6. data:{"newstype":newsType},
  7. success: function(data) {
  8. ...
  9. },
  10. error: function(){
  11. console.log('error');
  12. }
  13. });
  14. //增加
  15. $.ajax({
  16. url: "/admin/insert",
  17. type: "post",
  18. data: jsonNews,
  19. datatype: "json",
  20. success: function(data) {
  21. ...
  22. },
  23. error: function(XHR, textStatus, errorThrown) {
  24. console.log(textStatus + "ready:" + XHR.readyState);
  25. }
  26. });
  27. //删除
  28. $.ajax({
  29. url: "/admin/delete",
  30. type: "post",
  31. data: { "newsid": deleteId },
  32. success: function() {
  33. ...
  34. },
  35. error:function(xhr,status){
  36. console.log(status);
  37. }
  38. });
  39. //修改获取和提交:
  40. $.ajax({
  41. url: "/admin/curnews",
  42. type: "get",
  43. datatype: "json",
  44. data: { "newsid": updateId },
  45. success: function(data) {
  46. ...
  47. }
  48. });
  49. $.ajax({
  50. url: "/admin/update",
  51. type: "post",
  52. data: {
  53. "newstitle": $("#unewsTitle").val(),
  54. "newstype": $("#unewsType").val(),
  55. "newsimg": $("#unewsImg").val(),
  56. "newstime": $("#unewsTime").val(),
  57. "newssrc": $("#unewsSrc").val(),
  58. "id": updateId
  59. },
  60. success: function(data) {
  61. ...
  62. }
  63. });

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

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

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

  1. var mysql = require('mysql');
  2.  
  3. var connection = mysql.createPool({
  4. host: 'localhost',
  5. port: 3306,
  6. user: 'name',
  7. password: 'pwd',
  8. database: 'testabc'
  9. });
  10.  
  11. connection.getConnection(function(err,connection){
  12. if(err){
  13. console.log("connection false");
  14. }
  15. });
  16.  
  17. exports.connection=connection;

在index.js中,获取数据:

  1. var express = require('express');
  2. var router = express.Router();
  3. var db = require('./db.js');
  4.  
  5. /* 在主页获取数据时的请求. */
  6. router.get('/', function(req, res, next) {
  7. var newstype = req.query.newstype;
  8.  
  9. db.connection.query('SELECT * FROM `news` WHERE `newstype` = ?',[newstype],function(err,rows,fields){
  10. res.json(rows);
  11. })
  12. });
  13.  
  14. module.exports = router;

在user.js中:

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

  1. /*insert*/
  2. router.post('/insert', function(req, res) {
  3. var newstime = req.body.newstime,
  4. newstype = req.body.newstype,
  5. newstitle = req.body.newstitle,
  6. newsimg = req.body.newsimg,
  7. newssrc = req.body.newssrc;
  8. var thistitle = null;
  9. var count = 0;
  10.  
  11. /*获取与新增的title一样的数据数目:*/
  12. db.connection.query('select count(0) as count from news where newstitle=?', [newstitle], function(err, rows) {
  13. rows.forEach(function(e) {
  14. count = e.count;
  15. //console.log("##count = " + count);
  16. });
  17. /*有重复:*/
  18. if (count > 0) {
  19. res.json({ "success": "alreadyhad" });
  20. } else {
  21. db.connection.query('INSERT INTO `news` (`newstitle`,`newstype`,`newsimg`,`newstime`,`newssrc`) VALUES (?,?,?,?,?)', [newstitle, newstype, newsimg, newstime, newssrc], function(err, result) {
  22. if (!err) {
  23. //console.log(result.insertId);
  24. res.json({ "delete": "success" });
  25. } else {
  26. res.json({ "delete": "fail" });
  27. }
  28. });
  29. }
  30. });
  31. });

修改:

  1. /*模态框取值*/
  2. router.get('/curnews', function(req, res) {
  3. var newsid = req.query.newsid;
  4. db.connection.query('SELECT *FROM `news` WHERE id=?', [newsid], function(err, rows) {
  5. res.json(rows);
  6. })
  7. });
  8.  
  9. /*确认更新*/
  10. router.post('/update', function(req, res) {
  11. var newsid = req.body.id,
  12. newstype = req.body.newstype,
  13. newstitle = req.body.newstitle,
  14. newsimg = req.body.newsimg,
  15. newstime = req.body.newstime,
  16. newssrc = req.body.newssrc;
  17.  
  18. var thistitle = null;
  19. var count = 0;
  20.  
  21. db.connection.query('SELECT *FROM `news` WHERE id=?', [newsid], function(err, rows) {
  22. rows.forEach(function(e) {
  23. thistitle = e.newstitle;
  24. //console.log("##thistitle = " + thistitle);
  25. });
  26. /*获取与修改的title一样的数据数:*/
  27. db.connection.query('select count(0) as count from news where newstitle=?', [newstitle], function(err, rows) {
  28. rows.forEach(function(e) {
  29. count = e.count;
  30. //console.log("##count = " + count);
  31. });
  32. /*有重复且不是本身:*/
  33. if ((count > 0) && (newstitle != thistitle)) {
  34. res.json({ "success": "alreadyhad" });
  35. } else {
  36. db.connection.query('UPDATE `news` SET `newstitle`=?,`newstype`=?,`newsimg`=?,`newstime`=?,`newssrc`=? WHERE `id`=?', [newstitle, newstype, newsimg, newstime, newssrc, newsid], function(err, rows) {
  37. if (err) {
  38. res.json({ "update": "fail" });
  39. }else{
  40. res.json({ "update": "success" });
  41. }
  42.  
  43. });
  44. }
  45. });
  46. });
  47. });

删除:

  1. /*delete*/
  2. router.post('/delete', function(req, res) {
  3. var newsid = req.body.newsid;
  4. db.connection.query('DELETE FROM `news` WHERE `news`.`id`=?', [newsid], function(err, result) {
  5. //console.log(result.affecteRows);
  6. if (!err) {
  7. res.json({ "delete": "success" });
  8. } else {
  9. res.json({ "delete": "fail" });
  10. }
  11. });
  12. });

以上就是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. <<Vector Calculus>>笔记

    现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...

  2. 黄聪:《跟黄聪学WordPress插件开发》

    续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...

  3. 使用C#进行图像处理的几种方法(转)

    本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...

  4. CentOS下安装Redis及Redis的PHP扩展

    1.安装Redis 1.1 如果没有安装wget,安装wget yum install wget 1.2 在http://redis.io/download页面查看redis版本,并下载安装 wget ...

  5. The project: project which is referenced by the classpath, does not exist.

    有个java工程运行时报The project: project which is referenced by the classpath, does not exist.错误 上网查解决方案,说是将 ...

  6. ASCIITable: 演示 Arduino 串口输出的进阶功能

    原文地址 - https://www.arduino.cc/en/Tutorial/ASCIITable ASCII字符表 本例展示了高级的串口打印功能,通过本功能可以在Arduino软件(IDE)的 ...

  7. HTML5服务器推送消息的各种解决办法

    摘要 在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知. 往BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如 ...

  8. 【原创】Linux常用管理命令总结

    一.文件夹操作:1.查看文件夹ls [-al]/dir Diredtory_Name2.建立文件夹mkdir [-p] Diredtory_Name3.删除文件夹rm -r[f] Diredtory_ ...

  9. (Hibernate进阶)Hibernate系列——总结篇(九)

    这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...

  10. socket 网络编程

    1. 基础socket库 socket.h: /** * 网络套接字库 */ #ifndef Socket_h #define Socket_h #include <stdio.h> #i ...