【问题标题】:json-server: Default JSON for non-matching routejson-server:不匹配路由的默认 JSON
【发布时间】:2019-01-16 11:20:54
【问题描述】:

我想使用路由 /api/login/:userName/:password 伪造一个登录 API,如果在数据库。如何使用 json-server 实现这一点?

到目前为止,我有这个数据库 JSON:

{
   "login": [
      { "success": true, "userName": "zaphod", "password": "galaxy" }
   ],
   "invalidLogin": [
      { "success": false, "userName": "", "password": "" }
   ]
}

invalidLogin 当前未使用,应用于未知userNamepassword 的每个登录路由。

这是我的 server.js

const jsonServer = require('json-server');
const server = jsonServer.create();
const router = jsonServer.router('db.json');
const middlewares = jsonServer.defaults();

server.use(middlewares);

// Rewrite rules
server.use(jsonServer.rewriter({
   '/login/:userName/:password': "/login?userName=:userName&password=:password"
}))

server.use('/api', router);

server.listen(3001, () => {
  console.log('JSON Server is running')
});

【问题讨论】:

    标签: json-server


    【解决方案1】:

    您可以使用router.render 函数实现类似的功能:

    router.render = (req, res, next) => {
      if (req.path === '/login') {
        if (res.locals.data.length !== 0) {
          res.jsonp(res.locals.data);
        } else {
          res.jsonp([
            { "success": false, "userName": "", "password": "" }
          ])
        }
      } else {
        res.jsonp(res.locals.data);
      }
    }
    

    基本上,此路由器代码将检查是否有对 /login/.../... 的非空响应,然后在空登录请求时将其替换为错误 JSON。你可以进一步升级这个 mock 的逻辑。

    上述代码可以放在server.js中重写规则之后(你的代码有一个小错误,你必须用apireference issue写):

    server.use('/api', jsonServer.rewriter({
       "/login/:userName/:password": "/login?userName=:userName&password=:password",
    }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-24
      • 2018-10-01
      • 2017-10-08
      • 1970-01-01
      • 2014-10-03
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多