为了账号安全,请及时绑定邮箱和手机立即绑定

nuxt 上的 Axios api 代理不适用于现在 zeit 部署的服务器端渲染

nuxt 上的 Axios api 代理不适用于现在 zeit 部署的服务器端渲染

眼眸繁星 2021-09-30 15:19:17
按照Axios NuxtJS 配置,我在我的 config 上创建了这样的代理配置nuxt.config.js:  proxy: {    '/api/': {      target: 'https://myapidomain.com/',      pathRewrite: { '^/api/': '' },      changeOrigin: true    }  }此配置在dev环境中完美运行,包括服务器端渲染和客户端渲染。这是我们用来创建 api 包装器的代码api.js:export default (context, inject) => {  inject('api', {    getPageForSlug: (slugRoute) => {      return context.$axios.$get(`/api/pageForSlug?routeName=${slugRoute}`)    },  })}然后从任何 vue 类:const response = await app.$api.getPageForSlug(params.slug_route)如何使服务器端 API 请求适用于所有环境?
查看完整描述

2 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

你准备好迎接终极黑客了吗?


这其实是一个普遍的问题。调用 时zeit now,服务器实际上并没有得到支撑。因此,您需要自己完成。


我唯一一次遇到需要这样做的时候,我用 express 来解决它。一个快速而肮脏的解决方案是创建另一个脚本 ( proxy.js),并具有如下内容:


import express from 'express'

import proxy from 'express-http-proxy'

const app = express()

app.use('/', proxy(`https://myapidomain.com`))

export default app

这只是为您的 API 设置反向代理。


从那里,在您的 zeit 配置中,找到您的builds密钥(如果有),并将其替换为:


"builds": [

    { "use": "@now/next", "src": "package.json" },

    { "use": "@now/node", "src": "proxy.js" }

]

这将支撑并执行proxy.js当你建立使用zeit now。


请注意,这确实意味着您需要让主机proxy.js与“普通”主机匹配。如果您知道您的配置文件的格式(您应该知道),则可以导入和解析它以获得一个真实来源。


让我知道这是否有效。


查看完整回答
反对 回复 2021-09-30
  • 2 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信