最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用js簡單提供增刪改查接口

 更新時(shí)間:2019年05月12日 09:12:04   作者:鯨冬香  
這篇文章主要介紹了用js簡單提供增刪改查接口,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本周寫實(shí)驗(yàn),需要提供簡單的后臺(tái)接口對數(shù)據(jù)庫進(jìn)行增刪改查,以前寫后臺(tái)只用過php和java,因?yàn)楸容^容易,用js寫的也比較快,所以這次想用js實(shí)現(xiàn)簡單的增刪改查接口。

初始化

  • 需要工具:nodejs
  • 依賴:express,mysql,body-parser(這些都是npm的包)

為了能夠解析js,需要下載nodejs,下載完nodejs,創(chuàng)建一個(gè)文件夾,使用npm init初始化,除了填寫名字,一路確定下去,在文件夾下就會(huì)多出一個(gè)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這個(gè)包,在根目錄下使用這個(gè)命令:

$ npm install express

此時(shí)就引入了express這個(gè)包,創(chuàng)建一個(gè)index.js文件到根目錄下,內(nèi)容:

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

這說明我們已經(jīng)監(jiān)聽了3000端口并且可以用js來處理http請求了.

連接數(shù)據(jù)庫

我使用的是mysql數(shù)據(jù)庫,為了方便操作數(shù)據(jù)庫,引入mysql這個(gè)包:

$ 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同路徑下創(chuàng)建一個(gè)db.js專門用來處理數(shù)據(jù)庫連接問題:

//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;

配置數(shù)據(jù)庫信息獲得pool對象,就可以用pool對象來對數(shù)據(jù)庫進(jìn)行操作,在配置sql語句,將查詢方法和sql語句導(dǎo)出給其他模塊調(diào)用.

提供后臺(tái)接口

在index.js導(dǎo)入db.js,并且將http請求和數(shù)據(jù)庫操作對接:

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));
 });
});
這時(shí)再訪問localhost:3000就能看我們teacher表中所有的記錄了。
app.listen(3000, function() {
 console.log('server now listening at 3000 port');
});


另外,為了讀取post和put里的body信息,我們需要body-parser這個(gè)包:

$ 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());

這時(shí)就可以用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');
});

總結(jié)

感覺算是理解了語言只是工具這句話.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IE 下的只讀 innerHTML

    IE 下的只讀 innerHTML

    可以先使用 DOM 的 createElement 方法創(chuàng)建 tr 和 td,然后對 td 的 innerHTML 進(jìn)行相應(yīng)操作,最后用 appendChild 方法把創(chuàng)建的元素添加到 DOM 樹中。這樣在 IE 下就可以正常運(yùn)行了。
    2009-08-08
  • JS實(shí)現(xiàn)基于Sketch.js模擬成群游動(dòng)的蝌蚪運(yùn)動(dòng)動(dòng)畫效果【附demo源碼下載】

    JS實(shí)現(xiàn)基于Sketch.js模擬成群游動(dòng)的蝌蚪運(yùn)動(dòng)動(dòng)畫效果【附demo源碼下載】

    這篇文章主要介紹了JS實(shí)現(xiàn)基于Sketch.js模擬成群游動(dòng)的蝌蚪運(yùn)動(dòng)動(dòng)畫效果,涉及Sketch.js插件的使用及HTML5元素的應(yīng)用技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2017-08-08
  • pageGroup.js實(shí)現(xiàn)分頁功能

    pageGroup.js實(shí)現(xiàn)分頁功能

    這篇文章主要為大家詳細(xì)介紹了pageGroup.js實(shí)現(xiàn)分頁功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 讓JavaScript擁有類似Lambda表達(dá)式編程能力的方法

    讓JavaScript擁有類似Lambda表達(dá)式編程能力的方法

    在前幾天的博文中我發(fā)布了一個(gè)可以自定義頁碼呈現(xiàn)方式的組件,有C#和JavaScript兩個(gè)版本。
    2010-09-09
  • js中symbol類型以及symbol的三大應(yīng)用場景詳解

    js中symbol類型以及symbol的三大應(yīng)用場景詳解

    Symbol是ES6新推出的一種基本類型,它表示獨(dú)一無二的值,它可以接受一個(gè)字符串作為參數(shù),帶有相同參數(shù)的兩個(gè)Symbol值不相等,這個(gè)參數(shù)只是表示Symbol值的描述而已,下面這篇文章主要給大家介紹了關(guān)于js中symbol類型以及symbol的三大應(yīng)用場景,需要的朋友可以參考下
    2022-09-09
  • URL地址中的#符號使用說明

    URL地址中的#符號使用說明

    下面的內(nèi)容介紹了#號的使用,因?yàn)樵趗rl中多個(gè)#號代表不同的意義與區(qū)別。
    2011-02-02
  • JavaScript 異步調(diào)用框架 (Part 2 - 用例設(shè)計(jì))

    JavaScript 異步調(diào)用框架 (Part 2 - 用例設(shè)計(jì))

    在上一篇文章里說到,我們要設(shè)計(jì)一個(gè)異步調(diào)用框架,最好能夠統(tǒng)一同步異步調(diào)用的接口,同時(shí)具體調(diào)用順序與實(shí)現(xiàn)方式無關(guān)。那么我們現(xiàn)在就來設(shè)計(jì)這樣一個(gè)框架的用例。
    2009-08-08
  • 基于javascript原生判斷DOM是否加載完畢

    基于javascript原生判斷DOM是否加載完畢

    這篇文章主要介紹了基于javascript原生判斷DOM是否加載完畢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Bootstrap源碼解讀下拉菜單(4)

    Bootstrap源碼解讀下拉菜單(4)

    這篇文章主要源碼解讀了Bootstrap下拉菜單,介紹了Bootstrap各式各樣的下拉菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • ie8下修改input的type屬性報(bào)錯(cuò)的解決方法

    ie8下修改input的type屬性報(bào)錯(cuò)的解決方法

    當(dāng)用戶勾選顯示明文復(fù)選框時(shí),要以明文顯示用戶輸入的密碼,去掉勾選時(shí)要變回密文,問題是ie8中是不允許修改input的type屬性
    2014-09-09

最新評論

普宁市| 云安县| 阿克苏市| 五峰| 托克托县| 延长县| 徐水县| 荥阳市| 韶山市| 荣成市| 临海市| 区。| 邯郸市| 勃利县| 教育| 酒泉市| 永济市| 小金县| 开原市| 邢台县| 寿宁县| 磴口县| 乐清市| 洱源县| 绍兴县| 类乌齐县| 玉溪市| 招远市| 金乡县| 莱阳市| 青河县| 海口市| 托里县| 侯马市| 琼海市| 延安市| 砀山县| 钟祥市| 图木舒克市| 舞钢市| 保亭|