用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 相关文章推荐
Function.prototype.call.apply结合用法分析示例
Jul 03 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
浅析Node.js查找字符串功能
Sep 03 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
web打印小结
Jan 11 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 Javascript
JS中多层次排序算法的实现代码
Jan 06 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+Html+缓存
2006/11/25 PHP
php中将网址转换为超链接的函数
2011/09/02 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
不错的新闻标题颜色效果
2006/12/10 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
JS 精确统计网站访问量的实例代码
2013/07/05 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
JS实现图片居中悬浮效果
2017/12/25 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
在Python中使用元类的教程
2015/04/28 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
运动会入场式解说词
2014/02/18 职场文书
人事专员的职责
2014/02/26 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
天地会口号
2014/06/17 职场文书
语文课外活动总结
2014/08/27 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2014年安全员工作总结
2014/11/13 职场文书
优秀党员申报材料
2014/12/18 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA