用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 相关文章推荐
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
Mar 12 Javascript
jquery 3D球状导航的文章分类
Jul 06 Javascript
javascript自执行函数之伪命名空间封装法
Dec 25 Javascript
如何编写高质量JS代码
Dec 28 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
JS实现控制表格单元格垂直对齐的方法
Mar 30 Javascript
javascript实现十秒钟后注册按钮可点击的方法
May 13 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 Javascript
vue自动添加浏览器兼容前后缀操作
Aug 13 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
通过html表格发电子邮件
2006/10/09 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
javascript获取select值的方法分析
2015/07/02 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
Python中random模块生成随机数详解
2016/03/10 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python实现连续图文识别
2018/12/18 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
python 贪心算法的实现
2020/09/18 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
职业规划书如何设计?
2014/01/09 职场文书
现役军人家属慰问信
2015/03/24 职场文书
工作自我评价范文
2019/03/21 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
用JS创建一个录屏功能
2021/11/11 Javascript
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技