vue.js - Nuxt 静态生成页面和 axios post
问题描述
我有一个 Nuxt 项目。生成静态页面时一切正常。但是,我需要向另一台服务器发送 POST 请求。
我尝试在 nuxt.config.js 中使用代理和直接查询,但最终部署到 ngnix 后,没有任何效果。
请帮忙。
更新。重现步骤。
- 创建 Nuxt 应用程序,包括 axios 和代理
- 为其他网络服务配置您的代理:
proxy: {
'/api': {
target: 'http://example.com:9000',
pathRewrite: {
'^/api': '/',
},
},
changeOrigin: true,
},
在代码中的某处调用此服务:
const result = await this.$axios.post('/api/email/subscribe', {email: email})
运行“yarn dev”并测试服务。它在本地正常工作。
- 运行 'nuxt generate' 并部署静态代码托管服务,例如,hosting.com
- 运行调用上述服务的页面。
结果,它不是对 进行 POST 调用hosting.com/api/email/subscribe
,而是调用localhost:3000/api/email/subscribe
.
解决方案
一定要在你的项目 @nuxt/axios和@nuxtjs/proxy中安装nuxt版本的axios和proxy
之后在你的 nuxt.config.js 中添加 axios 作为模块加上 axios 和代理的这个选项:
modules: [
// Doc: https://axios.nuxtjs.org/usage
'@nuxtjs/axios',
//more modules if you need
],
/*
** Axios module configuration
*/
axios: {
proxy: true,
// See https://github.com/nuxt-community/axios-module#options
},
proxy: {
'/api/': {
target: process.env.AXIOS_SERVER, // I use .env files for the variables
pathRewrite: { '^/api/': '' }, //this should be your bug
},
},
现在你可以像这样在代码的任何部分使用 axios
const result = await this.$axios.post('/api/email/subscribe', {email: email})
它将在内部解决而AXIOS_SERVER/email/subscribe
不会导致 cors 问题。
额外:使用多个 .env 文件在本地测试环境
您可以为 dev 配置 .env ,为生产配置 .env.prod ,然后在本地使用yarn build && yarn start
您的生产环境测试您的应用程序。您只需要在 nuxt.config.js 文件的顶部添加它
const fs = require('fs')
const path = require('path')
if (process.env.NODE_ENV === 'production' && fs.existsSync('.env.prod')) {
require('dotenv').config({ path: path.join(__dirname, `.env.prod`) })
} else {
require('dotenv').config()
}
推荐阅读
- node.js - 我需要在 Heroku 上的 Express API 中添加 SSL 证书吗?
- python - Pandas 中的 VLookup 合并
- python - 在 Pandas 中渲染样式时如何获取或分配表格 ID
- angular - 如何在 Angular 指令中将 ElementRef 转换为 HTMLFormElement
- svg - svg中可以消除哪个字符?为什么圆弧会渲染成完整的圆?
- bash - 使用 scp 将文件从本地文件夹复制到远程文件夹,脚本抛出“没有这样的文件或目录”
- python - 如何在函数内使用带变量的线程?PyQt5
- rust - 编译 rust-src 时的未知功能“llvm_asm”
- python - 带 Raspberry Pi 和 OctoPrint 的灯丝运动传感器
- ansible - 使用组参数时,Ansible 用户模块不是幂等的