javascript - Nextjs API 文件夹调用 - 生产中出现 500 错误

标签 javascript next.js fetch-api vercel production-environment

我的 next.js 应用程序中有一个用于某些服务器端端点的 API 文件夹:

import { NextApiRequest, NextApiResponse } from 'next'

import Cors from 'cors'

// Initializing the cors middleware
const cors = Cors({
  methods: ['GET', 'HEAD', 'POST'],
  origin: '*',
  optionsSuccessStatus: 200,
})

// Helper method to wait for a middleware to execute before continuing
// And to throw an error when an error happens in a middleware
function runMiddleware(req, res, fn) {
  return new Promise((resolve, reject) => {
    fn(req, res, (result) => {
      if (result instanceof Error) {
        return reject(result)
      }

      return resolve(result)
    })
  })
}

export default async (req, res) => {
  await runMiddleware(req, res, cors)

  const POSKEY = process.env.POSKEY
  const PAYEE = process.env.PAYEE

  const { currency, url, locale, price } = req.body
  const currentUrl = url

  const apiResult = await fetch(
    'https://api.test.barion.com/v2/Payment/Start',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': 3495,
      },
      body: JSON.stringify({
        PosKey: POSKEY,
        PaymentType: 'Immediate',
        GuestCheckout: true,
        FundingSources: ['All'],
        Currency: currency,
        RedirectUrl: currentUrl,
        CallbackUrl: currentUrl,
        Locale: locale,
        Transactions: [
          {
            Payee: PAYEE,
            Total: price,
            Items: [
              {
                Name: 'Teszt',
                Description: 'Test item comment',
                Quantity: 1,
                Unit: 'pc',
                UnitPrice: 1,
                ItemTotal: 1,
                SKU: 'SM-01',
              },
            ],
          },
        ],
      }),
    }
  )
    .then((result) => {
      return result.json()
    })
    .catch((error) => {
      console.error(error)
    })

  res.status(200).json({ url: apiResult.GatewayUrl })
}

当我调用端点时,在开发中它工作得很好:

但是在生产中我遇到了 500 错误。 (部署到vercel)

vercel 控制台中出现错误:

[POST] /apigateway/ 23:30:28:53
2022-06-27T21:30:28.595Z e8c57750-4647-4e7a-b62e-6221abc141ac ERROR Error: Cannot find module
'/var/task/node_modules/next/dist/server/next.js'.
Please verify that the package.json has a valid "main" entry
at tryPackage (internal/modules/cjs/loader.js:321:19)
at Function.Module._findPath (internal/modules/cjs/loader.js:534:18)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:888:27)
at Function.Module._load (internal/modules/cjs/loader.js:746:27)
at Module.require (internal/modules/cjs/loader.js:974:19)
at require (internal/modules/cjs/helpers.js:101:18)
at Object.5199 (/var/task/.next/server/pages/api/gateway.js:20:39)
at __webpack_require__ (/var/task/.next/server/webpack-api-runtime.js:25:42)
at __webpack_exec__ (/var/task/.next/server/pages/api/gateway.js:109:39)
at /var/task/.next/server/pages/api/gateway.js:110:28 { code: 'MODULE_NOT_FOUND', path:
'/var/task/node_modules/next/package.json', requestPath: 'next' }
RequestId: e8c57750-4647-4e7a-b62e-6221abc141ac Error: Runtime exited
with error: exit status 1 Runtime.ExitError

我应该在 next.config 文件中添加哪些其他配置才能使其正常工作,我是这个 API 的初学者。

更新:
这解决了我的问题... https://github.com/vercel/next.js/issues/34844

最佳答案

问题是 .js 文件错误导入: 同样的问题在这里:https://github.com/vercel/next.js/issues/34844#issuecomment-1055628706

TLDR: 从“next”中删除 import { NextApiRequest, NextApiResponse };

关于javascript - Nextjs API 文件夹调用 - 生产中出现 500 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72638109/

相关文章:

Javascript 嵌套的 .each() 函数

svg - 有些 SVG 在 Nextjs 中工作,有些则不能,为什么?

javascript - 尽管控制台中出现错误,仍发出 CORS 请求

ajax - fetch 可以替代 AJAX 吗?

javascript - 从 Fetch API 更改请求对象的 URL

javascript - 在 react 模板中提取对象数组中的对象项

JavaScript 正确排序数字?

javascript - 使用 AES 算法在 javascript 中加密并在 C# 中解密

javascript - 我可以从变量中导出默认值吗?

javascript - 重新加载页面后立即填写字段