用js简单提供增删改查接口


Posted in Javascript onMay 12, 2019

本周写实验,需要提供简单的后台接口对数据库进行增删改查,以前写后台只用过php和java,因为比较容易,用js写的也比较快,所以这次想用js实现简单的增删改查接口。

初始化

  • 需要工具:nodejs
  • 依赖:express,mysql,body-parser(这些都是npm的包)

为了能够解析js,需要下载nodejs,下载完nodejs,创建一个文件夹,使用npm init初始化,除了填写名字,一路确定下去,在文件夹下就会多出一个package.json文件.

// package.json
{
 "name": "test",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC"
}

为了接受并处理http请求,需要引入express这个包,在根目录下使用这个命令:

$ npm install express

此时就引入了express这个包,创建一个index.js文件到根目录下,内容:

var express = require('express');
var app = express();

app.get('/', function(req, res) {
 res.send('hello world!');
});
app.listen(3000, function() {
 console.log('server now listening at 3000 port');
});

打开终端,使用nodejs编译index.js,并且打开浏览器输入localhost:3000就能看到hello world!了:

$ node index.js
server now listening at 3000 port

用js简单提供增删改查接口

这说明我们已经监听了3000端口并且可以用js来处理http请求了.

连接数据库

我使用的是mysql数据库,为了方便操作数据库,引入mysql这个包:

$ npm install mysql
npm WARN test@1.0.0 No description
npm WARN test@1.0.0 No repository field.

+ mysql@2.17.1
added 9 packages from 14 contributors and audited 134 packages in 4.145s
found 0 vulnerabilities

在index.js同路径下创建一个db.js专门用来处理数据库连接问题:

//db.js
var mysql = require('mysql');
var pool = mysql.createPool({ //连接信息
 host: "localhost",
 user: "root",
 password: "",
 database: "c#learn",
 port: "3306"
});

var sql = { 
 insert:'INSERT INTO teacher(name, username, email, sex) VALUES(?,?,?,?)',    
 update:'update teacher set name=?, username=?, email=?, sex=? where id=?', 
 delete: 'delete from teacher where id=?', 
 queryById: 'select * from teacher where id=?', 
 queryAll: 'select * from teacher'
};

function query(sql, data, callback) {
 pool.getConnection(function(err, connection) { 
 connection.query(sql, data, function(err, rows) {
  callback(err, rows);
  connection.release(); //释放连接
 });
 });
}
exports.query = query;
exports.sql = sql;

配置数据库信息获得pool对象,就可以用pool对象来对数据库进行操作,在配置sql语句,将查询方法和sql语句导出给其他模块调用.

提供后台接口

在index.js导入db.js,并且将http请求和数据库操作对接:

var express = require('express');
var app = express();
var db = require('./db.js');

app.get('/', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 db.query(db.sql.queryAll, [], function(err, rows) {
  res.send(JSON.stringify(rows));
 });
});
这时再访问localhost:3000就能看我们teacher表中所有的记录了。
app.listen(3000, function() {
 console.log('server now listening at 3000 port');
});

用js简单提供增删改查接口

另外,为了读取post和put里的body信息,我们需要body-parser这个包:

$ npm install body-parser

使用bodyParser来配置app:

//index.js
var express = require('express');
var db = require('./db.js');
var app = express();
var bodyParser = require('body-parser');

app.use(bodyParser.json());

这时就可以用req.body读取请求体了.

完整代码:

var express = require('express');
var db = require('./db.js');
var app = express();
var bodyParser = require('body-parser');

app.use(bodyParser.json());

app.get('/', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 db.query(db.sql.queryAll, [], function(err, rows) {
  console.log('err', err, 'rows', rows);
  res.send(JSON.stringify(rows));
 });
});

app.get('/:id', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 db.query(db.sql.queryById, [req.params.id], function(err, rows) {
  res.send(JSON.stringify(rows));
 });
});

app.post('', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 console.log(req.body.name);
 var teacher = req.body;
 db.query(db.sql.insert, [teacher.name, teacher.username, teacher.email, teacher.sex], function(err, rows) {
  if (err) {
   res.status(500);
   res.send('insert error');
  } else {
   res.status(200);
   res.send('insert success');
  }
 });
});

app.put('/:id', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 var teacher = req.body;
 var array = [teacher.name, teacher.username, teacher.email, teacher.sex, req.params.id];
 db.query(db.sql.update, array, function(err, rows) {
  if (err) {
   res.status(500);
   res.send('update error');
  } else {
   res.status(200);
   res.send('update success');
  }
 });
});

app.delete('/:id', function(req, res) {
 res.header("Access-Control-Allow-Origin", "*");
 db.query(db.sql.delete, [req.params.id], function(err, rows) {
  if (err) {
   res.status(500);
   res.send('delete error');
  } else {
   res.status(200);
   res.send('delete success');
  }
 });
});

app.listen(3000, function() {
 console.log('server now listening at 3000 port');
});

总结

感觉算是理解了语言只是工具这句话.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js option删除代码集合
Nov 12 Javascript
JavaScript实现表格点击排序的方法
May 11 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
AngularJS单选框及多选框实现双向动态绑定
Jan 13 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 Javascript
layui table 多行删除(id获取)的方法
Sep 12 Javascript
JS数组方法concat()用法实例分析
Jan 18 Javascript
Vue+element+cookie记住密码功能的简单实现方法
Sep 20 Javascript
OpenLayers3实现鼠标移动显示坐标
Sep 25 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 #Javascript
vue中axios实现数据交互与跨域问题
May 12 #Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
May 12 #jQuery
JS块级作用域和私有变量实例分析
May 11 #Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 #Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 #Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 #jQuery
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
PHP实现的简单sha1加密功能示例
2017/08/27 PHP
jQuery选择器全集详解
2014/11/24 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
Python求出0~100以内的所有素数
2018/01/23 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
对Python w和w+权限的区别详解
2019/01/23 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
通过PHP与Python代码对比的语法差异详解
2019/07/10 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
计算机个人求职信范例
2014/01/24 职场文书
应届生自荐书
2014/06/23 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
技术股份合作协议书
2014/10/05 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
美丽人生观后感
2015/06/03 职场文书
保护环境的宣传语
2015/07/13 职场文书
导游词之河姆渡遗址博物馆
2019/10/10 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
react中的DOM操作实现
2021/06/30 Javascript
Python爬虫入门案例之爬取二手房源数据
2021/10/16 Python
Python如何让字典保持有序排列
2022/04/29 Python
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers