nodejs+mysql
接着上一篇的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的更多相关文章
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...
- nodejs mysql 创建连接池
用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...
- nodejs mysql 操作数据库方法一详解
nodejs mysql 数据查询例子 时间 2014-11-11 15:28:01 姜糖水原文 http://www.cnphp6.com/archives/59864 1.安装nodejs 2 ...
- nodejs+mysql 断线重连
var mysql = require('mysql'); var conn; function handleError () { conn = mysql.createConnection({ ho ...
- Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
[TOC] 1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库,它的key可以是string/set/hash/list ...
- 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...
- nodejs mysql 数据查询例子
1.安装nodejs 2.安装mysql npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: ...
- [NodeJs] 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库
小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...
- nodejs MySQL操作
一 wamp创建数据库 选择phpMyAdmin 选择用户,添加用户 填写数据库详细资料,填写完毕选择右下角的“执行” 用户添加成功 2. nodejs 安装mysql驱动 npm install ...
随机推荐
- <<Vector Calculus>>笔记
现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...
- 黄聪:《跟黄聪学WordPress插件开发》
续<跟黄聪学WordPress主题开发>之后,又一个作品完成!<跟黄聪学Wordpress插件开发>,国内最好的Wordpress插件开发视频教程!! 目录预览: WordPr ...
- 使用C#进行图像处理的几种方法(转)
本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...
- CentOS下安装Redis及Redis的PHP扩展
1.安装Redis 1.1 如果没有安装wget,安装wget yum install wget 1.2 在http://redis.io/download页面查看redis版本,并下载安装 wget ...
- 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.错误 上网查解决方案,说是将 ...
- ASCIITable: 演示 Arduino 串口输出的进阶功能
原文地址 - https://www.arduino.cc/en/Tutorial/ASCIITable ASCII字符表 本例展示了高级的串口打印功能,通过本功能可以在Arduino软件(IDE)的 ...
- HTML5服务器推送消息的各种解决办法
摘要 在各种BS架构的应用程序中,往往都希望服务端能够主动地向客户端推送各种消息,以达到类似于邮件.消息.待办事项等通知. 往BS架构本身存在的问题就是,服务器一直采用的是一问一答的机制.这就意味着如 ...
- 【原创】Linux常用管理命令总结
一.文件夹操作:1.查看文件夹ls [-al]/dir Diredtory_Name2.建立文件夹mkdir [-p] Diredtory_Name3.删除文件夹rm -r[f] Diredtory_ ...
- (Hibernate进阶)Hibernate系列——总结篇(九)
这篇博文是hibernate系列的最后一篇,既然是最后一篇,我们就应该进行一下从头到尾,整体上的总结,将这个系列的内容融会贯通. 概念 Hibernate是一个对象关系映射框架,当然从分层的角度看,我 ...
- socket 网络编程
1. 基础socket库 socket.h: /** * 网络套接字库 */ #ifndef Socket_h #define Socket_h #include <stdio.h> #i ...