---
title: Admin API sorguları
description: Next.js uygulamanızda sık kullanılan ikas Admin API query'leri için hazır API route örnekleri.
---

Bu sayfada, örnek uygulamada sık kullanılan ikas Admin API query'lerini çağıran API route örneklerini bulabilirsiniz. Her örnek `pages/api/ikas` klasörü altında ayrı bir dosya olarak yer alır.

## Yetkilendirilmiş Uygulamayı Alma

ikas Admin API'deki `getAuthorizedApp` ile yetkilendirilmiş uygulama (authorized app) bilgisini alabilirsiniz.

<Callout type="info" title="Parametreler">
[getAuthorizedApp](https://builders.ikas.com/docs/admin-api/merchant#getAuthorizedApp) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/get-authorized-app.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { AuthorizedApp } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type GetAuthorizedApiResponse = {
  authorizedApp?: AuthorizedApp;
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<GetAuthorizedApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    // req.user is guaranteed by ensureLoggedIn middleware
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.getAuthorizedApp({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to get authorized app' });
    }

    if (response.data?.getAuthorizedApp) {
      res.status(200).json({ authorizedApp: response.data.getAuthorizedApp });
    } else {
      console.error('Unexpected response structure or no data found.');
      res.status(404).json({ statusCode: 404, message: 'Authorized app data not found' });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Satıcı Bilgisini Alma

ikas Admin API'deki `getMerchant` ile satıcı (merchant) bilgisini alabilirsiniz.

<Callout type="info" title="Parametreler">
[getMerchant](https://builders.ikas.com/docs/admin-api/merchant#getMerchant) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/get-merchant.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { Merchant } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type GetMerchantApiResponse = {
  merchant?: Merchant;
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<GetMerchantApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.getMerchant({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res.status(500).json({ statusCode: 500, message: response.errors[0].message || 'Failed to get merchant' });
    }

    if (response.data?.getMerchant) {
      res.status(200).json({ merchant: response.data.getMerchant });
    } else {
      console.error('Unexpected response structure or no merchant data found.');
      res.status(404).json({ statusCode: 404, message: 'Merchant data not found' });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Uygulama Ödemelerini Listeleme

ikas Admin API'deki `listMerchantAppPayment` ile uygulama ödemelerinin listesini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listMerchantAppPayment](https://builders.ikas.com/docs/admin-api/app-payments#listMerchantAppPayment) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-app-payments.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { MerchantAppPayment } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ListAppPaymentsApiResponse = {
  merchantAppPayments?: MerchantAppPayment[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ListAppPaymentsApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    // Add any necessary filter/pagination parameters here if needed
    const response = await ikas.adminApi.queries.listMerchantAppPayment({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list app payments' });
    }

    // Check if the data structure is as expected
    if (response.data?.listMerchantAppPayment?.results) {
      res.status(200).json({ merchantAppPayments: response.data.listMerchantAppPayment.results });
    } else {
      console.error('Unexpected response structure or no payments found.');
      // Return empty list if results are simply missing but no error occurred
      res.status(200).json({ merchantAppPayments: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Kategorileri Listeleme

ikas Admin API'deki `listCategory` ile kategori listesini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listCategory](https://builders.ikas.com/docs/admin-api/categories#listCategory) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-category.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { Category } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ListCategoryApiResponse = {
  categories?: Category[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ListCategoryApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    // Add any necessary filter/pagination parameters here if needed
    const response = await ikas.adminApi.queries.listCategory({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list categories' });
    }

    if (response.data?.listCategory?.results) {
      res.status(200).json({ categories: response.data.listCategory.results });
    } else {
      console.error('Unexpected response structure or no categories found.');
      res.status(200).json({ categories: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Müşterileri Listeleme

Müşterileri listelemek istediğimizde `listCustomer` API'sini kullanırız. Bu örnekte ikas müşterilerini sayfalama (pagination) ile listeleyeceğiz.

<Callout type="info" title="Parametreler">
[listCustomer](https://builders.ikas.com/docs/admin-api/customers#listCustomer) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-customers.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { PaginationInput, CustomerPaginationResponse } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type CustomersApiRequest = {
  pagination?: PaginationInput;
};

// Combine response type with error type
export type CustomersApiResponse = Partial<CustomerPaginationResponse> & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<CustomersApiResponse>>();

router
  .use(ensureLoggedIn)
  // Changed to POST to accept body for pagination/filter/sort details
  .post(async (req, res) => {
    try {
      // Cast request body
      const { pagination } = req.body as CustomersApiRequest;

      const token = await RedisDB.token.get(req.user!.authorizedAppId);
      if (!token) {
        return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
      }

      const ikas = getIkas(token);
      const response = await ikas.adminApi.queries.listCustomer({
        // Pass pagination from request body or default
        pagination: pagination || {
          page: 1,
          limit: 10,
        },
        sort: '-createdAt',
        // Add filters here if needed
      });

      if (response.errors && response.errors.length > 0) {
        console.error('GraphQL Errors:', response.errors);
        return res
          .status(500)
          .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list customers' });
      }

      if (response.data?.listCustomer) {
        res.status(200).json(response.data.listCustomer);
      } else {
        console.error('Unexpected response structure or no customer data found.');
        // Return default empty pagination structure
        res.status(200).json({ results: [], count: 0, total: 0, page: 1, limit: 10 });
      }
    } catch (err: any) {
      console.error(err);
      res.status(500).json({ statusCode: 500, message: err.message });
    }
  });

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Siparişleri Listeleme

ikas Admin API'deki `listOrders` ile siparişleri alabilirsiniz.

<Callout type="info" title="Parametreler">
[listOrders](https://builders.ikas.com/docs/admin-api/orders#listOrder) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-orders.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { PaginationInput, OrderPaginationResponse } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type OrdersApiRequest = {
  pagination?: PaginationInput;
};

export type OrdersApiResponse = Partial<OrderPaginationResponse> & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<OrdersApiResponse>>();

router
  .use(ensureLoggedIn)
  // Changed to POST to accept body for pagination/filter/sort details
  .post(async (req, res) => {
    try {
      const { pagination } = req.body as OrdersApiRequest;

      const token = await RedisDB.token.get(req.user!.authorizedAppId);
      if (!token) {
        return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
      }

      const ikas = getIkas(token);
      const response = await ikas.adminApi.queries.listOrder({
        pagination: pagination || {
          page: 1,
          limit: 10,
        },
        sort: '-createdAt',
        // Add filters here if needed
      });

      if (response.errors && response.errors.length > 0) {
        console.error('GraphQL Errors:', response.errors);
        return res
          .status(500)
          .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list orders' });
      }

      if (response.data?.listOrder) {
        res.status(200).json(response.data.listOrder);
      } else {
        console.error('Unexpected response structure or no order data found.');
        res.status(200).json({ results: [], count: 0, total: 0, page: 1, limit: 10 });
      }
    } catch (err: any) {
      console.error(err);
      res.status(500).json({ statusCode: 500, message: err.message });
    }
  });

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Fiyat Listelerini Listeleme

ikas Admin API'deki `listPriceList` ile fiyat listelerini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listPriceList](https://builders.ikas.com/docs/admin-api/price-lists#listPriceList) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-pricelist.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { PriceList } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ListPriceListApiResponse = {
  priceLists?: PriceList[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ListPriceListApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.listPriceList({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list price lists' });
    }

    if (response.data?.listPriceList?.results) {
      res.status(200).json({ priceLists: response.data.listPriceList.results });
    } else {
      console.error('Unexpected response structure or no price lists found.');
      res.status(200).json({ priceLists: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Ürünleri Listeleme

Yetkilendirme sürecini tamamladığımıza göre artık uygulamamızda ikas API'lerini kullanabiliriz. Burada `listProduct` API'sini kullanarak ikas ürünlerini sayfalama (pagination) ile listeleyeceğiz.

<Callout type="info" title="Parametreler">
[listProduct](https://builders.ikas.com/docs/admin-api/products#listProduct) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-products.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { PaginationInput, ProductPaginationResponse } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ProductsApiRequest = {
  pagination?: PaginationInput;
};

export type ProductsApiResponse = Partial<ProductPaginationResponse> & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ProductsApiResponse>>();

router
  .use(ensureLoggedIn)
  // Changed to POST to accept body for pagination/filter/sort details
  .post(async (req, res) => {
    try {
      const { pagination } = req.body as ProductsApiRequest;

      const token = await RedisDB.token.get(req.user!.authorizedAppId);
      if (!token) {
        return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
      }

      const ikas = getIkas(token);
      const response = await ikas.adminApi.queries.listProduct({
        pagination: pagination || {
          page: 1,
          limit: 10,
        },
        // Add filters/sort here if needed
      });

      if (response.errors && response.errors.length > 0) {
        console.error('GraphQL Errors:', response.errors);
        return res
          .status(500)
          .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list products' });
      }

      if (response.data?.listProduct) {
        res.status(200).json(response.data.listProduct);
      } else {
        console.error('Unexpected response structure or no product data found.');
        res.status(200).json({ results: [], count: 0, total: 0, page: 1, limit: 10 });
      }
    } catch (err: any) {
      console.error(err);
      res.status(500).json({ statusCode: 500, message: err.message });
    }
  });

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Satış Kanallarını Listeleme

ikas Admin API'deki `listSalesChannel` ile satış kanalı listesini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listSalesChannel](https://builders.ikas.com/docs/admin-api/sales-channels#listSalesChannel) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-sales-channel.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { SalesChannel } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type SalesChannelApiResponse = {
  salesChannels?: SalesChannel[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<SalesChannelApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.listSalesChannel({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list sales channels' });
    }

    if (response.data?.listSalesChannel?.results) {
      res.status(200).json({ salesChannels: response.data.listSalesChannel.results });
    } else {
      console.error('Unexpected response structure or no sales channels found.');
      res.status(200).json({ salesChannels: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Stok Lokasyonlarını Listeleme

ikas Admin API'deki `listStockLocation` ile stok lokasyonu listesini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listStockLocation](https://builders.ikas.com/docs/admin-api/stock-locations#listStockLocation) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-stock-location.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { StockLocation } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ListStockLocationApiResponse = {
  stockLocations?: StockLocation[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ListStockLocationApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.listStockLocation({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list stock locations' });
    }

    if (response.data?.listStockLocation?.results) {
      res.status(200).json({ stockLocations: response.data.listStockLocation.results });
    } else {
      console.error('Unexpected response structure or no stock locations found.');
      res.status(200).json({ stockLocations: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```

## Storefront'ları Listeleme

ikas Admin API'deki `listStorefront` ile storefront listesini alabilirsiniz.

<Callout type="info" title="Parametreler">
[listStorefront](https://builders.ikas.com/docs/admin-api/storefronts#listStorefront) isteğinin aldığı parametreleri görmek için query referans sayfasına göz atın.
</Callout>

```typescript title="File: pages/api/ikas/list-storefront.ts"
import type { NextApiRequest, NextApiResponse } from 'next';
import { createRouter } from 'next-connect';
import { ensureLoggedIn } from '@/lib/ensure-logged-in';
import { getIkas } from '@/lib/ikas-api';
import { RedisDB } from '@/lib/redis';
import { Storefront } from '@ikas/api-client';
import { ApiErrorResponse } from '@/globals/types';

export type ListStorefrontApiResponse = {
  storefronts?: Storefront[];
} & ApiErrorResponse;

const router = createRouter<NextApiRequest, NextApiResponse<ListStorefrontApiResponse>>();

router.use(ensureLoggedIn).get(async (req, res) => {
  try {
    const token = await RedisDB.token.get(req.user!.authorizedAppId);
    if (!token) {
      return res.status(401).json({ statusCode: 401, message: 'Invalid token' });
    }

    const ikas = getIkas(token);
    const response = await ikas.adminApi.queries.listStorefront({});

    if (response.errors && response.errors.length > 0) {
      console.error('GraphQL Errors:', response.errors);
      return res
        .status(500)
        .json({ statusCode: 500, message: response.errors[0].message || 'Failed to list storefronts' });
    }

    if (response.data?.listStorefront?.results) {
      res.status(200).json({ storefronts: response.data.listStorefront.results });
    } else {
      console.error('Unexpected response structure or no storefronts found.');
      res.status(200).json({ storefronts: [] });
    }
  } catch (err: any) {
    console.error(err);
    res.status(500).json({ statusCode: 500, message: err.message });
  }
});

export default router.handler({
  onError: (err: any, req, res) => {
    console.error(err.stack);
    res.status(err.statusCode || 500).end(err.message);
  },
});
```
