成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(一)

CoffeX / 2994人閱讀

摘要:使用開(kāi)發(fā)小說(shuō)接口服務(wù)一版本技術(shù)棧使用。接口用追書(shū)神器。目前接口設(shè)計(jì)有首頁(yè),小說(shuō)詳情頁(yè),搜索,小說(shuō)文章列表頁(yè),排行。搜索接口版本的搜索接口只取前條數(shù)據(jù),可以模糊查詢(xún)。取前條,并添加圖片鏈接請(qǐng)求出錯(cuò)了請(qǐng)傳入?yún)?shù)訪(fǎng)問(wèn)遮天就可以看到返回的數(shù)據(jù)了。

使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(一)

1.0版本技術(shù)棧使用express-generator、express、request、morgan、file-stream-rotator。接口用追書(shū)神器API。
目前接口設(shè)計(jì)有首頁(yè),小說(shuō)詳情頁(yè),搜索,小說(shuō)文章列表頁(yè),排行API。

github創(chuàng)建倉(cāng)庫(kù)

先創(chuàng)建一個(gè)倉(cāng)庫(kù)放文件

然后克隆創(chuàng)建好的倉(cāng)庫(kù)

git clone https://github.com/lanpangzhi/novel-api.git
安裝 express-generator 快速生成項(xiàng)目
npm install -g express-generator

然后再之前克隆倉(cāng)庫(kù)的上一級(jí)目錄執(zhí)行

express --no-view novel-api
cd novel-api
npm install 
npm install request file-stream-rotator -S
// Linux MacOS
DEBUG=novel-api:* & npm start
// windows 
set DEBUG=novel-api:* & npm start

生成好的目錄結(jié)構(gòu)和文件

設(shè)置cors 跨域

打開(kāi)項(xiàng)目根目錄app.js,放在路由上面。

app.all("*", function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By", " 3.2.1")
    res.header("Content-Type", "application/json;charset=utf-8");
    next()
});
日志寫(xiě)入本地文件

按時(shí)間分割log日志并寫(xiě)入本地磁盤(pán),需要在app.js文件中引入fs和file-stream-rotator模塊。

let fs = require("fs"); 
let FileStreamRotator = require("file-stream-rotator");  // 日志按時(shí)間分割模塊

// 下面代碼寫(xiě)在var app = express();下面
let logDir = path.join(__dirname, "log");

// 檢查是否存在logDir這個(gè)目錄沒(méi)有則創(chuàng)建
fs.existsSync(logDir) || fs.mkdirSync(logDir);

// 日志分割流
let accessLogStream = FileStreamRotator.getStream({
    date_format: "YYYYMMDD",
    filename: path.join(logDir, "access-%DATE%.log"),
    frequency: "daily",
    verbose: false
});

// 日志中間件
app.use(logger("combined", { stream: accessLogStream }));
創(chuàng)建公共文件

項(xiàng)目根目錄創(chuàng)建common文件夾,再里面再新建一個(gè)common.json文件

{
    "API": "http://api.zhuishushenqi.com",
    "PIC": "http://statics.zhuishushenqi.com",
    "CHAPTER": "http://chapter2.zhuishushenqi.com"
}

API域名: http://api.zhuishushenqi.com
圖片域名: http://statics.zhuishushenqi.com
章節(jié)域名: http://chapter2.zhuishushenqi...

首頁(yè)接口

1.0版本首頁(yè)接口直接返回最熱榜前20條數(shù)據(jù)。
修改app.js 文件路由中間件配置

app.use("/index", indexRouter);

修改routes/index.js 文件

let express = require("express");
let request = require("request");
let common = require("../common/common.json"); // 引用公共文件
let router = express.Router();

/** 
  首頁(yè)數(shù)據(jù)追書(shū)最熱榜 Top100
  獲取單一排行榜
  http://api.zhuishushenqi.com/ranking/{rankingId}
*/
router.get("/", function(req, res, next) {
  // 請(qǐng)求追書(shū)最熱榜 Top100
  request.get(`${common.API}/ranking/54d42d92321052167dfb75e3`, function (error, response, body) {
    if (error){
      res.send(JSON.stringify({"flag": 0, "msg": "請(qǐng)求出錯(cuò)了..."}));
    }
    
    // 解析返回?cái)?shù)據(jù)取前20條,并添加圖片url鏈接
    body = JSON.parse(body);

    if (body.ok){
      let books = body.ranking.books.slice(0, 19);
      books.forEach(element => {
        element.cover = common.PIC + element.cover;
      });

      res.send(JSON.stringify({ "flag": 1, "books": books, "msg": "OK" }));
    }else{
      res.send(JSON.stringify({ "flag": 0, "msg": "rankingId有問(wèn)題" }));
    }  
  });
});

module.exports = router;

訪(fǎng)問(wèn)http://localhost:3000/index 就可以看到返回的數(shù)據(jù)了。

搜索接口

1.0版本的搜索接口只取前40條數(shù)據(jù),可以模糊查詢(xún)。
修改app.js 文件路由中間件配置,把users刪掉。

let searchRouter = require("./routes/search");
app.use("/search", searchRouter);

然后把routes文件夾下面的users.js刪除,新建search.js

let express = require("express");
let request = require("request");
let common = require("../common/common.json"); // 引用公共文件
let router = express.Router();

/** 
  模糊搜索接口
  返回模糊搜索前40條數(shù)據(jù)
  http://api.zhuishushenqi.com/book/fuzzy-search?query={name}
*/
router.get("/", function(req, res, next) {
  // 判斷query參數(shù)有沒(méi)有傳遞過(guò)來(lái)
  if (req.query.query){
    // req.query.query 編碼轉(zhuǎn)義
    let query = encodeURIComponent(req.query.query);
    request.get(`${common.API}/book/fuzzy-search?query=${query}`, function (error, response, body) {
      if (error){
        res.send(JSON.stringify({ "flag": 0, "msg": "請(qǐng)求出錯(cuò)了..." }));
      }

       // 解析返回?cái)?shù)據(jù)
      body = JSON.parse(body);

      if (body.ok){
        if (body.books.length == 0){
          res.send(JSON.stringify({ "flag": 0, "msg": "沒(méi)有找到書(shū)籍,換個(gè)名字試試吧。" }));
        }
        
        // 取前40條,并添加圖片url鏈接
        let books = body.books.slice(0, 39);
        books.forEach(element => {
          element.cover = common.PIC + element.cover;
        });

        res.send(JSON.stringify({ "flag": 1, "books": books, "msg": "OK" }));
      }else{
        res.send(JSON.stringify({ "flag": 0, "msg": "請(qǐng)求出錯(cuò)了..." }));
      }
    });
  }else{
    res.send(JSON.stringify({"flag": 0, "msg": "請(qǐng)傳入query參數(shù)"}));
  }
  
});

module.exports = router;

訪(fǎng)問(wèn)http://localhost:3000/search/?query=遮天 就可以看到返回的數(shù)據(jù)了。

喜歡可以去github送個(gè)star謝謝 我的博客和GitHub地址

https://github.com/lanpangzhi

http://blog.langpz.com

參考

https://github.com/expressjs/morgan
https://juejin.im/entry/593a3fdf61ff4b006c737ca4
https://github.com/jianhui1012/bookreader/wiki/API-%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103200.html

相關(guān)文章

  • 使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(二)

    摘要:使用開(kāi)發(fā)小說(shuō)接口服務(wù)二線(xiàn)上訪(fǎng)問(wèn)地址之前完成了首頁(yè)和搜索的接口,現(xiàn)在就開(kāi)始寫(xiě)剩下的接口。獲取小說(shuō)源因?yàn)樽窌?shū)神器正版源是收費(fèi)加密的,所以只能使用盜版源,所以要封裝一個(gè)獲取小說(shuō)源的接口。小說(shuō)源接口返回的。版本的開(kāi)發(fā)就告于段落了。 使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(二) 線(xiàn)上訪(fǎng)問(wèn)地址https://api.langpz.com/ 之前完成了首頁(yè)和搜索的接口,現(xiàn)在就開(kāi)始寫(xiě)剩下的接口...

    Atom 評(píng)論0 收藏0
  • 使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(三)

    摘要:使用開(kāi)發(fā)小說(shuō)接口服務(wù)三線(xiàn)上訪(fǎng)問(wèn)地址之前發(fā)現(xiàn)追書(shū)神器詳情頁(yè)竟然沒(méi)有下一章和上一章的返回值,只能自己動(dòng)手封裝一下。 使用Express開(kāi)發(fā)小說(shuō)API接口服務(wù)1.0(三) 線(xiàn)上訪(fǎng)問(wèn)地址https://api.langpz.com/ 之前發(fā)現(xiàn)追書(shū)神器API詳情頁(yè)竟然沒(méi)有下一章和上一章的返回值,只能自己動(dòng)手封裝一下。 app.js 增加錯(cuò)誤處理 // catch 404 and forward ...

    shixinzhang 評(píng)論0 收藏0
  • vue仿追書(shū)神器,vue小說(shuō)項(xiàng)目源碼

    摘要:一點(diǎn)閱讀器源自追書(shū)神器,免費(fèi)使用目前已初步開(kāi)發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類(lèi)閱讀寫(xiě)的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線(xiàn),可以再微信搜索一點(diǎn)文章體驗(yàn)在線(xiàn)體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書(shū)神 vue-reader 一點(diǎn)閱讀器!API源自追書(shū)神器,免費(fèi)使用!目前已初步開(kāi)發(fā)完成! Github項(xiàng)目地址:https://github.com/An...

    justCoding 評(píng)論0 收藏0
  • vue仿追書(shū)神器,vue小說(shuō)項(xiàng)目源碼

    摘要:一點(diǎn)閱讀器源自追書(shū)神器,免費(fèi)使用目前已初步開(kāi)發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類(lèi)閱讀寫(xiě)的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線(xiàn),可以再微信搜索一點(diǎn)文章體驗(yàn)在線(xiàn)體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書(shū)神 vue-reader 一點(diǎn)閱讀器!API源自追書(shū)神器,免費(fèi)使用!目前已初步開(kāi)發(fā)完成! Github項(xiàng)目地址:https://github.com/An...

    happyhuangjinjin 評(píng)論0 收藏0
  • vue仿追書(shū)神器,vue小說(shuō)項(xiàng)目源碼

    摘要:一點(diǎn)閱讀器源自追書(shū)神器,免費(fèi)使用目前已初步開(kāi)發(fā)完成項(xiàng)目地址歡迎,,推薦一個(gè)之前用文章類(lèi)閱讀寫(xiě)的一點(diǎn)閱讀微信小程序一點(diǎn)文章已上線(xiàn),可以再微信搜索一點(diǎn)文章體驗(yàn)在線(xiàn)體驗(yàn)地址點(diǎn)擊這里體驗(yàn)服務(wù)器太,渲染慢部分效果截圖一點(diǎn)閱讀器優(yōu)勢(shì)一點(diǎn)閱讀器追書(shū)神 vue-reader 一點(diǎn)閱讀器!API源自追書(shū)神器,免費(fèi)使用!目前已初步開(kāi)發(fā)完成! Github項(xiàng)目地址:https://github.com/An...

    Pocher 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<