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

算法霜晶客
• 阅读 3615

本周写实验,需要提供简单的后台接口对数据库进行增删改查,以前写后台只用过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');
});

总结

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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java List 数组删除元素
在java中,ArrayList是一个很常用的类,在编程中经常要对ArrayList进行增、删、改、查操作。之前在学校时一直认为删除操作是最简单的,现在才越发觉得自己愚蠢。只需要设置好预期条件的查询才是最简单的,删除涉及到存储空间的释放,以及数组的遍历等问题,在list的操作中相对还算小老哥呢。这两天在给小程序提供后台接口,因为设计的改变,需要
Karen110 Karen110
3年前
一篇文章带你了解Django ORM操作(基础篇)
前言在日常开发中,需要大量对数据库进行增删改查操作。如果头铁的话,使用原生SQL是最好的,毕竟性能又高,又灵活。但是通常情况下,我们不是太需要那么苛刻的性能,也没有那么多刁钻的需求用原生SQL通常会使用简单快捷的ORM进行增删改查一起看学习一下Django的ORM操作吧表结构设计还是从实际角度出发。假设,现在我需要设计一个简单的图书管理系统,是那种买的书,不
Kelly916 Kelly916
4年前
Android 打造属于自己的数据库操作类。
1、概述开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建、管理数据库。但是当我们需要去做增删改查的操作的时候,就得通过get
Stella981 Stella981
3年前
IBatis Mapper&Spring Data JPA实现原理
   因为我们最近的一个项目数据库访问呢层使用Ibatis, 今天团队成员问Ibatis中只写接口,不写实现,Ibatis是如何帮助我们查询数据。其实原理很简单,就是Java的反射和代理,因为Java的代理是真对于接口的。所以我们就可以在开发中DAO模块就直接写接口和对用的SQL就可以。实现类由我们生成代理,当代理方法被调用的时候我们就使用通用的数据库
Stella981 Stella981
3年前
Spring Boot + Elasticsearch 使用示例
本文分别使用ElasticsearchRepository和ElasticsearchTemplate实现Elasticsearch的简单的增删改查一、ElasticStackElasticStack是ELKStack在5.0版本加入Beats套件后的新称呼1.Elasti
Wesley13 Wesley13
3年前
MongoDB简单的增删改查
首先引入mongoDB的jar包<dependencies  <dependency    <groupIdorg.mongodb</groupId    <artifactIdmongojavadriver</artifactId    <version3.0.4</version  </dependency
Stella981 Stella981
3年前
C#实现代码生成器【客户端】
做了2,3年的javaweb,始终木有逃离所谓基础业务,增删改查这些一成不变的东西写起来浪费大量时间,于是做了个简单的代码生成器快速生成代码生成器的原理其实很简单,都是基于模板实现替换,模板基于是Nvelocity。部分代码展示:【目前只支持mysql、oracle、sqlite三种数据库的连接有需要可以自己增加】singSy
Wesley13 Wesley13
3年前
Mysql之数据操作
数据的增删改查:增:insertinto表名values();删:物理删除:deletefrom表名where条件;逻辑删除;改:update表名set列1值1,列2值2...where条件;查:全查:select\from数据表名;指定条件查:select\fr
Stella981 Stella981
3年前
Hibernate反射DAO模式
在持久层框架中,如果我们要像简单的JDBC连接数据库那样写一个通用的Dao方法的话,那么把JDBC简单的业务逻辑搬到hibernate持久层框架中,当然是不可能的,这里主要的问题就在于hibernate持久层框架中,因为它不是像JDBC那样简单的增删改查的编写,而是要针对实体类映射配置文件来对照数据库表字段进行操作,而且操作是面向对象的查询,不是简单的sql
Stella981 Stella981
3年前
HBase
1过滤器HBase的基本API,包括增、删、改、查等。增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。1.1过滤器的两类参数过滤器可
程序员一鸣 程序员一鸣
3天前
HarmonyOs开发:关系型数据库封装之增删改查
在鸿蒙当中,也给我们提供了关系型数据库进行数据之间的操作,和Android中类似,关系型数据库基于SQLite组件,提供了一套完整的对本地数据库进行管理的机制,也对外提供一系列的增、删、改、查等接口,非常的方便,为了针对数据更加方便的操作,目前对系统的Api做了一层简单的封装。