首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法链接后端应用编程接口路由- NextJS

无法链接后端应用编程接口路由- NextJS
EN

Stack Overflow用户
提问于 2020-06-07 23:37:29
回答 1查看 1.3K关注 0票数 3

我正在制作一个购物应用程序,并创建了一个Koa + NodeJS后端和在前端运行的NextJS,在相同的端口,我还创建了一个自定义的server.js文件,当运行在我的电脑本地时,它运行正常,所有的路线工作如预期,我能够从前端(反应)从我的后端(Koa)定义的路线提取数据。

现在的问题是,当我将我的应用程序部署到vercel时,它似乎无法识别我的Koa路由,并且在控制台中为我向后端路由发出的所有请求抛出了一个404错误。这是我第一次使用NextJS,所以我真的对这里的问题知之甚少,所以我希望在这方面得到一些支持。

此外,当我部署它时,shopify身份验证似乎也不再像它在本地开发中运行时那样工作。

我的代码: server.js:

代码语言:javascript
复制
require('isomorphic-fetch');

const dotenv = require('dotenv');
dotenv.config();

const Koa = require('koa');
const next = require('next');
const { default: createShopifyAuth } = require('@shopify/koa-shopify-auth');
const { verifyRequest } = require('@shopify/koa-shopify-auth');
const session = require('koa-session');
const { default: graphQLProxy } = require('@shopify/koa-shopify-graphql-proxy');
const { ApiVersion } = require('@shopify/koa-shopify-graphql-proxy');
const Router = require('koa-router');
const { receiveWebhook, registerWebhook } = require('@shopify/koa-shopify-webhooks');
const getSubscriptionUrl = require('./server/getSubscriptionUrl');

const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

const {
  SHOPIFY_API_SECRET_KEY,
  SHOPIFY_API_KEY,
  HOST,
} = process.env;

app.prepare().then(() => {
  const server = new Koa();
  const router = new Router();
  server.use(session({ sameSite: 'none', secure: true }, server));
  server.keys = [SHOPIFY_API_SECRET_KEY];

  server.use(
    createShopifyAuth({
      apiKey: SHOPIFY_API_KEY,
      secret: SHOPIFY_API_SECRET_KEY,
      scopes: ['read_products', 'write_products'],
      async afterAuth(ctx) {
        const { shop, accessToken } = ctx.session;
        ctx.cookies.set("shopOrigin", shop, {
          httpOnly: false,
          secure: true,
          sameSite: 'none'
        });
        const registration = await registerWebhook({
          address: `${HOST}/webhooks/products/create`,
          topic: 'PRODUCTS_CREATE',
          accessToken,
          shop,
          apiVersion: ApiVersion.October19
        });

        if (registration.success) {
          console.log('Successfully registered webhook!');
        } else {
          console.log('Failed to register webhook', registration.result);
        }
        await getSubscriptionUrl(ctx, accessToken, shop);
      }
    })
  );

router
  .get('/api', ctx => {
    ctx.res.statusCode = 200;  
    ctx.body = "API Route"
  })

  const webhook = receiveWebhook({ secret: SHOPIFY_API_SECRET_KEY });

  router.post('/webhooks/products/create', webhook, (ctx) => {
    console.log('received webhook: ', ctx.state.webhook);
  });

  server.use(graphQLProxy({ version: ApiVersion.April19 }));

  router.get('*', verifyRequest(), async (ctx) => {
    await handle(ctx.req, ctx.res);
    ctx.respond = false;
    ctx.res.statusCode = 200;
  });

  server.use(router.allowedMethods());
  server.use(router.routes());

  server.listen(port, () => {
    console.log(`> Ready on http://localhost:${port}`);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 10:41:45

如果我没记错的话,我发现Vercel不再支持定制服务器了。从这个https://github.com/vercel/next.js/issues/9397#issuecomment-556215227

因此,我使用Heroku部署我的应用程序,现在它可以正常工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62247716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档