用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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
JavaScript中创建类/对象的几种方法总结
Nov 29 Javascript
Bootstrap每天必学之附加导航(Affix)插件
Apr 25 Javascript
浅谈javascript中的constructor
Jun 08 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
学习JavaScript图片预加载模块
Nov 07 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
Mar 01 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
JS实现页面数据懒加载
Feb 13 Javascript
Vue详细的入门笔记
May 10 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
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生成静态页
2006/11/25 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP attributes()函数讲解
2019/02/03 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
JS类的封装及实现代码
2009/12/02 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
如何使Chrome控制台支持多行js模式——意外发现
2013/06/13 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
chrome调试javascript详解
2015/10/21 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
一篇文章带你浅入webpack的DLL优化打包
2020/02/20 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python实现读取并保存文件的类
2017/05/11 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
django连接oracle时setting 配置方法
2019/08/29 Python
PHP面试题附答案
2015/11/28 面试题
管理学专业个人求职信范文
2013/09/21 职场文书
六十大寿答谢词
2014/01/12 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
中秋晚会策划方案
2014/06/12 职场文书
行政处罚决定书
2015/06/24 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
一文弄懂MySQL中redo log与binlog的区别
2022/02/15 MySQL