资讯专栏INFORMATION COLUMN

使用Express开发小说API接口服务1.0(一)

CoffeX / 2772人阅读

摘要:使用开发小说接口服务一版本技术栈使用。接口用追书神器。目前接口设计有首页,小说详情页,搜索,小说文章列表页,排行。搜索接口版本的搜索接口只取前条数据,可以模糊查询。取前条,并添加图片链接请求出错了请传入参数访问遮天就可以看到返回的数据了。

使用Express开发小说API接口服务1.0(一)

1.0版本技术栈使用express-generator、express、request、morgan、file-stream-rotator。接口用追书神器API。
目前接口设计有首页,小说详情页,搜索,小说文章列表页,排行API。

github创建仓库

先创建一个仓库放文件

然后克隆创建好的仓库

git clone https://github.com/lanpangzhi/novel-api.git
安装 express-generator 快速生成项目
npm install -g express-generator

然后再之前克隆仓库的上一级目录执行

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

生成好的目录结构和文件

设置cors 跨域

打开项目根目录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()
});
日志写入本地文件

按时间分割log日志并写入本地磁盘,需要在app.js文件中引入fs和file-stream-rotator模块。

let fs = require("fs"); 
let FileStreamRotator = require("file-stream-rotator");  // 日志按时间分割模块

// 下面代码写在var app = express();下面
let logDir = path.join(__dirname, "log");

// 检查是否存在logDir这个目录没有则创建
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 }));
创建公共文件

项目根目录创建common文件夹,再里面再新建一个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
章节域名: http://chapter2.zhuishushenqi...

首页接口

1.0版本首页接口直接返回最热榜前20条数据。
修改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();

/** 
  首页数据追书最热榜 Top100
  获取单一排行榜
  http://api.zhuishushenqi.com/ranking/{rankingId}
*/
router.get("/", function(req, res, next) {
  // 请求追书最热榜 Top100
  request.get(`${common.API}/ranking/54d42d92321052167dfb75e3`, function (error, response, body) {
    if (error){
      res.send(JSON.stringify({"flag": 0, "msg": "请求出错了..."}));
    }
    
    // 解析返回数据取前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有问题" }));
    }  
  });
});

module.exports = router;

访问http://localhost:3000/index 就可以看到返回的数据了。

搜索接口

1.0版本的搜索接口只取前40条数据,可以模糊查询。
修改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条数据
  http://api.zhuishushenqi.com/book/fuzzy-search?query={name}
*/
router.get("/", function(req, res, next) {
  // 判断query参数有没有传递过来
  if (req.query.query){
    // req.query.query 编码转义
    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": "请求出错了..." }));
      }

       // 解析返回数据
      body = JSON.parse(body);

      if (body.ok){
        if (body.books.length == 0){
          res.send(JSON.stringify({ "flag": 0, "msg": "没有找到书籍,换个名字试试吧。" }));
        }
        
        // 取前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": "请求出错了..." }));
      }
    });
  }else{
    res.send(JSON.stringify({"flag": 0, "msg": "请传入query参数"}));
  }
  
});

module.exports = router;

访问http://localhost:3000/search/?query=遮天 就可以看到返回的数据了。

喜欢可以去github送个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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103200.html

相关文章

  • 使用Express开发小说API接口服务1.0(二)

    摘要:使用开发小说接口服务二线上访问地址之前完成了首页和搜索的接口,现在就开始写剩下的接口。获取小说源因为追书神器正版源是收费加密的,所以只能使用盗版源,所以要封装一个获取小说源的接口。小说源接口返回的。版本的开发就告于段落了。 使用Express开发小说API接口服务1.0(二) 线上访问地址https://api.langpz.com/ 之前完成了首页和搜索的接口,现在就开始写剩下的接口...

    Atom 评论0 收藏0
  • 使用Express开发小说API接口服务1.0(三)

    摘要:使用开发小说接口服务三线上访问地址之前发现追书神器详情页竟然没有下一章和上一章的返回值,只能自己动手封装一下。 使用Express开发小说API接口服务1.0(三) 线上访问地址https://api.langpz.com/ 之前发现追书神器API详情页竟然没有下一章和上一章的返回值,只能自己动手封装一下。 app.js 增加错误处理 // catch 404 and forward ...

    shixinzhang 评论0 收藏0
  • vue仿追书神器,vue小说项目源码

    摘要:一点阅读器源自追书神器,免费使用目前已初步开发完成项目地址欢迎,,推荐一个之前用文章类阅读写的一点阅读微信小程序一点文章已上线,可以再微信搜索一点文章体验在线体验地址点击这里体验服务器太,渲染慢部分效果截图一点阅读器优势一点阅读器追书神 vue-reader 一点阅读器!API源自追书神器,免费使用!目前已初步开发完成! Github项目地址:https://github.com/An...

    justCoding 评论0 收藏0
  • vue仿追书神器,vue小说项目源码

    摘要:一点阅读器源自追书神器,免费使用目前已初步开发完成项目地址欢迎,,推荐一个之前用文章类阅读写的一点阅读微信小程序一点文章已上线,可以再微信搜索一点文章体验在线体验地址点击这里体验服务器太,渲染慢部分效果截图一点阅读器优势一点阅读器追书神 vue-reader 一点阅读器!API源自追书神器,免费使用!目前已初步开发完成! Github项目地址:https://github.com/An...

    happyhuangjinjin 评论0 收藏0
  • vue仿追书神器,vue小说项目源码

    摘要:一点阅读器源自追书神器,免费使用目前已初步开发完成项目地址欢迎,,推荐一个之前用文章类阅读写的一点阅读微信小程序一点文章已上线,可以再微信搜索一点文章体验在线体验地址点击这里体验服务器太,渲染慢部分效果截图一点阅读器优势一点阅读器追书神 vue-reader 一点阅读器!API源自追书神器,免费使用!目前已初步开发完成! Github项目地址:https://github.com/An...

    Pocher 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<