在上篇文章 使用 Node.js + Express开发服务端 我们已经学习了NodeJS+Express基本用法,你可能会记得我们的API接口返回的数据是假数 据并没有关联数据查询。在本篇文章中我们将实现基本的数据交互并实现简单 的增删改查。如果你还未阅读上篇文章请移步阅读~~~
1. 准备工作
首先我们使用Express生成一个空的Express项目
cd /Users/SPRINT/Desktop 进入桌面
express MysqlDemo 生成一个MysqlDemo项目
cd MysqlDemo/ 进入项目根目录
npm install 安装依赖模块
npm start 启动服务器
启动完成后如果没有错误发生访问 http://localhost:3000/ 将看到 Welcome to Express 信息
2. 配置MySQL
确保你电脑中已安装了MySQL环境,我们使用的IDE为MySQLWorkbench. 首先我们新建一个Connection
1.png打开刚刚新建的Connection并新一个数据库并命名为 ExpressDB
2.png接下来我们新建一个 Table 并命名为 User
3.png从上图看到我们增加了两列
uid INT(11) 用户id
userName VARCHAR(25) 用户姓名
Mysql的准备到此就准备完成,接下来是我们本篇教程的重点,怎样使用NodeJS+Express链接Mysql
3. 安装MySQL模块
打开我们刚刚创建的 MysqlDemo 工程 这里我推荐使用WebStorm 或者 HBuilder 作为演示我们使用 WebStorm 打开工程
4.png首先我们打开 package.json 在 dependencies 选项中添加
"mysql": "latest"
接着执行如下命令
npm install 安装mysql依赖
npm start 启动服务器
接着我们向工程中添加一个 db 目录 用于存放MySQL配置信息
并在 db 目录总新建一个 DBConfig.js 文件并添加如下内容
module.exports =
{
mysql: {
host: '127.0.0.1',
user: 'root',
password: '你的数据库Coonection密码',
database:'ExpressDB', // 前面建的user表位于这个数据库中
port: 3306
}
};
完成后工程目前的结构如下
5.png4. 添加API接口调用SQL语句
紧接着我们继续在 db目录中添加 usersql.js 并键入如下内容
var UserSQL = {
insert:'INSERT INTO User(uid,userName) VALUES(?,?)',
queryAll:'SELECT * FROM User',
getUserById:'SELECT * FROM User WHERE uid = ? ',
};
module.exports = UserSQL;
usersql.js 的主要作用是提供增删改查sql语句。
紧接着我们还需要在 routes 目录中添加一个users.js 向外暴露我们操作 User 的API接口。
为了添加测试数据暂时向 users.js 中添加一个 addUser 接口 内容如下
var express = require('express');
var router = express.Router();
// 导入MySQL模块
var mysql = require('mysql');
var dbConfig = require('../db/DBConfig');
var userSQL = require('../db/Usersql');
// 使用DBConfig.js的配置信息创建一个MySQL连接池
var pool = mysql.createPool( dbConfig.mysql );
// 响应一个JSON数据
var responseJSON = function (res, ret) {
if(typeof ret === 'undefined') {
res.json({ code:'-200', msg: '操作失败'
});
} else {
res.json(ret);
}};
// 添加用户
router.get('/addUser', function(req, res, next){
// 从连接池获取连接
pool.getConnection(function(err, connection) {
// 获取前台页面传过来的参数
var param = req.query || req.params;
// 建立连接 增加一个用户信息
connection.query(userSQL.insert, [param.uid,param.name], function(err, result) {
if(result) {
result = {
code: 200,
msg:'增加成功'
};
}
// 以json形式,把操作结果返回给前台页面
responseJSON(res, result);
// 释放连接
connection.release();
});
});
});
module.exports = router;
重点内容已添加了注释,接着我们重新启动服务器 在浏览器访问
http://localhost:3000/users/addUser?uid=4&name=helloMySQL
如果添加成功页面将会输出
{"code":200,"msg":"增加成功"}
其他sql的语法大家可以自行体验,这里就不在一一赘述,如果你在测试过程中遇到问题欢迎留言交流.
欢迎关注微信公众号:DevTipss
DevTipss
网友评论
原本我是想直接通过,写一个更新数据库字段的
userSql.js 添加了如下代码
update: 'UPDATE User SET uid=?,userName=? WHERE uid=?', // 更新数据
user.js 添加如下代码
// 更新用户
router.get('/updateUser',function (req, res, next) {
pool.getConnection(function (err, connection) {
var param = req.query || req.params;
connection.query(userSQL.update, [param.uid,param.name], function (err, result) {
if(result) {
result = {
code: 200,
msg: '修改成功'
};
}
responseJSON(res, result);
connection.release();
});
});
});
然后直接访问链接
http://localhost:3000/users/updateUser?uid=213&;name=baobao
但是无法实现,期间还尝试了select语句能正常调用,但是不知道如何把数据输出,drop的方法可以正常删除表
推荐下,分库分表中间件 Sharding-JDBC 源码解析 17 篇:http://www.yunai.me/categories/Sharding-JDBC/?jianshu&401
阶
为什么是localhost不是127.0.0.1,
为什么是3000而不是3306,
为什么是users而不是users.js,
跪求回复 : (
var express = require('express');
var app = express();
//引用db.js
var db = require("./db.js");
var router = express.Router();
//进入查询页面
router.get('/toquery',function(req,res,next){
db.query('select * from zhaobin.order',function(err,rows){
//var user = {username:"赵斌",password:"123456"}
if(err){
res.render('error',{title:'error',datas:[]});
}else{
res.render('index',{title:'注册',datas:rows,users:res.locals.user});
}
});
});
//查询
router.post("/query",function(req,res){
var oname = req.body.oname;
var ordernum = req.body.ordernum;
var sql = 'select * from zhaobin.order ';
if(oname){
sql += "and oname like '%"+oname+"%' ";
}if(ordernum){
sql += "and ordernum like '%"+ordernum+"%' ";
}
sql = sql.replace("and","where");
db.query(sql,function(err,rows){
//var user = {username:"赵斌",password:"123456"}
if(err){
res.end("查询失败:"+err);
}else{
res.render('index',{title:'查询',datas:rows,oname:oname,ordernum:ordernum,users:res.locals.user});
}
});
});
<body>
{{if users}}
<h1>你好{{user.username}}</h1>
{{/if}}
<a href="/user/logout">退出</a>
<form action="/user/query" method="post" id="select">
订单名:<input name="oname" value="{{oname}}"/>
订单数量:<input name="ordernum" value="{{ordernum}}"/>
<!--订购时间: <input name="dealtime" onclick="WdatePicker();" value="{{time}}"/> -->
<input type="submit" value="提交"/>
</form>
<table border="1" cellpadding="3" cellspacing="1">
<tr>
<td>订单编号</td>
<td>订单名</td>
<td>订购数</td>
<td><a href="/user/add">添加</a></td>
<!-- <td>交易时间</td> -->
<!-- <td></td> -->
</tr>
{{each datas as value index}}
<tr>
<td>{{value.oid}}</td>
<td>{{value.oname}}</td>
<td>{{value.ordernum}}</td>
<!-- <td>{{value.dealtime}}</td> -->
<td><a href="/user/delete/{{value.oid}}">删除</a></td>
<td><a href="/user/toupdate/{{value.oid}}">修改</a></td>
</tr>
{{/each}}
</table>
</body>
OrderDao.userOrders = function (query)
{
let uid = query["u_id"];
let status = query["ord_status"];
let page = query["page"] || 1;
// 查询指定状态的订单
if(status)
{
return DB.query(SQL_QueryByUID_Status_StartIndex,[uid,status,PageCount * (page - 1)]);
}else{
return DB.query(SQL_QueryByUID_StartIndex,[uid,PageCount * (page - 1)]);
}
};
return DB.query(SQL_QueryByUID_StartIndex,[uid,PageCount * (page - 1)]);
}
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'query' of undefined
at E:\mysqlblog\routes\users.js:28:13
求助