Не удается найти подходящий mock-сервер для предоставления ответов json с предопределенным URL - PullRequest
0 голосов
/ 16 октября 2018

Ну, проблема в следующем:

Я разрабатываю приложение внешнего интерфейса (используя vue.js), мне нужно искать макет бэкэнда (я не должен издеваться над ним спереди).

В этом приложении я могу делать http-запросы, в моих интересах только GET и PATCH, я хочу сделать эти запросы на фиктивном сервере (совместим с json: api, то есть он возвращает правильный заголовок типа контента какapplication / vnd.api + json).

Этот сервер должен отвечать предопределенным (уже жестко запрограммированным) ответом json, поэтому единственное, что меня волнует, это то, что он просматривает URL-адрес в запросе иотвечает существующим файлом или файлом json.

Я видел некоторые решения, но не одно, где я могу настроить URL-адрес для получения следующим образом (мне просто важно, если метод и URL-адрес совпадают, я возвращаюфайл json), например:

  • Запрос: (может быть mysite (точка) com или localhost: PORTNUMBER)
    GET http://localhost:PORTNUMBER/api/projects/1000?include=subtree,subtree.vertices,vertices

изатем я отвечаю жестко закодированным файлом json

То же самоеха-патч, на самом деле меня не волнует анализ тела, просто используйте сопоставление URL-адресов, чтобы получить правильный предопределенный ответ, этот не создавал проблем, так как URL-адрес намного проще и найденные решения поддерживают этот тип URL-адреса.:

PATCH http://localhost:PORTNUMBER/api/projects/500

Есть ли какое-либо решение, в котором я могу настроить свои конечные точки в качестве URL-адреса для запроса GET?Те, которые я нашел, выдают мне неверный путь из-за ? Include ... части URL, поскольку они служат только как PATH / PATH / RESOURCE, но когда речь идет о PATH / PATH / RESOURCE? any-weird-url-мне-нужно, тогда это вызывает проблему, до сих пор мне просто нужно что-то "настолько простое", как это.

Я попробовал это самостоятельно, используя node.js:

// app.js, my main file
var express = require("express");
var bodyParser = require("body-parser");
var app = express();

// configuring the body parser to accept JSON as well as url encoded values
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json({
  type: ['application/json', 'application/vnd.api+json']
}));

var routes = require("./routes/routes.js")(app);

var server = app.listen(3000, function () {
    console.log("Listening on port %s...", server.address().port);
});

В маршрутах я определяю это:

// inside /routes/routes.js
var appRouter = function(app) {
// only works if I let it like "api/projects/1000"
  app.get("api/projects/1000?include=subtree,subtree.vertices,vertices",   function(req, res) {
    res.set('Content-Type', 'application/vnd.api+json');
    res.send({-----here goes my json response-----});
  });
}

module.exports = appRouter;

1 Ответ

0 голосов
/ 16 октября 2018

Удалось сделать это, затем вместо того, что было в app.get, я использовал:

app.get("api/projects/1000", function(req, res) {
  res.set('Content-Type', 'application/vnd.api+json');
  if(!req.query.include){
    res.send(---whatever response when the url doesn't have include---)
    return;
  }
  res.send({-----here goes my json response when it has include-----});
});

Возможно, это не самая приятная вещь в мире, но отсюда вы можете настроить ее для отправки ранее написанногоJSON-файлы или все, что вам нужно, с поправкой на ваши потребности, если у кого-то есть предложение в качестве лучшего ответа, не стесняйтесь комментировать :)

...