用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 相关文章推荐
javascript实现划词标记+划词搜索功能
Mar 06 Javascript
基于jquery实现的表格分页实现代码
Jun 21 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 Javascript
js获取电脑分辨率的思路及操作
Nov 22 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
JavaScript中var关键字的使用详解
Aug 14 Javascript
利用fecha进行JS日期处理
Nov 21 Javascript
利用原生JS与jQuery实现数字线性变化的动画
Feb 24 Javascript
原生javascript移动端滑动banner效果
Mar 10 Javascript
Angularjs 实现移动端在线测评效果(推荐)
Apr 05 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
Jan 26 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
php实现简单的MVC框架实例
2015/09/23 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
表单内同名元素的控制
2006/11/22 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
canvas学习之API整理笔记(二)
2016/12/29 Javascript
关于vue.js过渡css类名的理解(推荐)
2017/04/10 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
Python语言描述KNN算法与Kd树
2017/12/13 Python
对Python3中的input函数详解
2018/04/22 Python
Python 字符串与二进制串的相互转换示例
2018/07/23 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
python初步实现word2vec操作
2020/06/09 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
社区工作者演讲稿
2014/05/23 职场文书
学校国庆节活动总结
2015/03/23 职场文书
现实表现证明材料
2015/06/19 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
springboot集成flyway自动创表的详细配置
2021/06/26 Java/Android
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript