Импортировать модуль с папкой и передавать данные в модуль в nodejs - PullRequest
0 голосов
/ 01 мая 2020

Я нашел учебник о Разработка чистого REST API с помощью Node.js (Express + Mon go)

проекта в github .

но проблема в том, что я не понял концепцию маршрутизации в одной части.

неправильно понимаемая часть - как можно передать данные httpRequest в handle метод в contact-endpoint модуле?
, потому что handle метод здесь
export default function makeContactsEndpointHandler({ contactList }) { return async function handle(httpRequest) {

это index проекта:

import handleContactsRequest from "./contacts";
import adaptRequest from "./helpers/adapt-request";

app.all("/contacts", contactsController);
app.get("/contacts/:id", contactsController);

function contactsController(req, res) {
   const httpRequest = adaptRequest(req);
   handleContactsRequest(httpRequest)
       .then(({ headers, statusCode, data }) =>
            res.set(headers).status(statusCode).send(data)
       )
       .catch((e) => res.status(500).end());
}

это adaptRequest:

export default function adaptRequest (req = {}) {
   return Object.freeze({
       path: req.path,
       method: req.method,
       pathParams: req.params,
       queryParams: req.query,
       body: req.body
  })
}

это handleContactsRequest модуль:

import makeDb from "../db";
import makeContactList from "./contact-list";
import makeContactsEndpointHandler from "./contacts-endpoint";

const database = makeDb();
const contactList = makeContactList({ database });
const contactsEndpointHandler = makeContactsEndpointHandler({ contactList });

export default contactsEndpointHandler;

это часть contact-endpoint модуля:

export default function makeContactsEndpointHandler({ contactList }) {
    return async function handle(httpRequest) {
         switch (httpRequest.method) {
              case "POST":
                  return postContact(httpRequest);
              case "GET":
                  return getContacts(httpRequest);
         default:
             return makeHttpError({
                   statusCode: 405,
                   errorMessage: `${httpRequest.method} method not allowed.`,
             });
        }
   }

1 Ответ

0 голосов
/ 01 мая 2020

makeContactsEndpointHandler - это функция, которая возвращает функцию (async handle(xxx)).

В handleContactsRequest мы экспортируем результат вызова: makeContactsEndpointHandler({ contactList }). Следовательно, это сама функция async handle(xxx).

Итак, в index, когда мы вызываем handleContactsRequest с константой httpRequest в качестве аргумента, мы фактически вызываем эту функцию handle(xxx). (Я написал xxx в качестве имени параметра, чтобы подчеркнуть разницу между двумя объявлениями httpRequest.)

...