json-server: JSON по умолчанию для несовпадающего маршрута

Я хочу подделать API входа в систему с маршрутом / api / login /: userName /: password, который вернет { "success": false, "userName": "", "password": "" } в случае, если userName или password не найдены в базе данных. Как я могу добиться этого с помощью json-сервера?

Пока у меня есть эта база данных JSON:

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

invalidLogin в настоящее время не используется и должен использоваться для каждого маршрута входа с неизвестным userName или password.

Это мой 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')
});

person Jürgen Bayer    schedule 09.08.2018    source источник


Ответы (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 при пустом запросе на вход. Вы можете модернизировать логику этого макета и дальше.

Вышеупомянутый код можно разместить после правил перезаписи в server.js (в вашем коде была небольшая ошибка, вы должны написать ее с помощью api, справочная проблема):

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