Node.js 办公室JS CORS问题
我一直在尝试使用OfficeJavaScriptAPI创建一个简单的函数,登录到我公司在本地机器上托管的on-prem服务器,并获取响应。我使用了Node.js 办公室JS CORS问题,node.js,vue.js,axios,office-js,Node.js,Vue.js,Axios,Office Js,我一直在尝试使用OfficeJavaScriptAPI创建一个简单的函数,登录到我公司在本地机器上托管的on-prem服务器,并获取响应。我使用了Vue JS作为我的前端框架,使用axios处理HTTP/S请求 以下是axios调用的代码: import Vue from "vue"; import Vuex from "vuex"; const axios = require('axios').default; axios.defaults.cros
Vue JS
作为我的前端框架,使用axios
处理HTTP/S请求
以下是axios调用的代码:
import Vue from "vue";
import Vuex from "vuex";
const axios = require('axios').default;
axios.defaults.crossDomain = true;
Vue.use(Vuex);
/**
* Network interactions and state manager
*/
const Network = new Vuex.Store({
state: {
url: 'http://127.0.0.1', //localhost by default
user: '',
pass: ''
},
getters: {
},
mutations: {
setLoginCreds(state, payload) {
state.url = payload.url;
state.user = payload.user;
state.pass = payload.pass;
},
},
actions: {
async login(context, { url, user, pass }) {
let route = '/core/loginguest';
let path = url + route;
await axios({
url: path,
method: 'POST',
params: {
userid: user,
password: pass
}
}).then(response => {
console.log(response)
if (response.status == 200) {
context.commit('setLoginCreds', { url, user, pass })
}
}).catch(err => {
console.log('Exception hit!')
console.log(err)
})
},
}
});
export default Network;
在Word上运行此命令时,我在登录时遇到以下错误(使用Microsoft Edge dev工具查看):
SEC7120:[CORS]原点的https://localhost:3000“没有找到”https://localhost:3000'在位于的跨源资源的访问控制允许源响应标头中'http://127.0.0.1/core/loginguest?userid=hari&password=hari1234"
据我所知,CORS问题源于访问控制允许来源:
不存在于服务器的响应头中,但我在Electron.js上使用相同的调用时没有遇到这种情况
这只是另一个CORS问题,让我任由服务器摆布,还是我可以从客户端控制它?因此,为了澄清,OP询问为什么托管在
localhost:3000
的外接程序不能调用位于localhost:80
的本地服务器,从而导致CORS问题
这是意料之中的。以下是一些要查看的资源:
- 联络主任/邮递员:
- 同域CORS/
- 你可以实施一个小技巧,我不知道在你的情况下是否可行
您可以通过Exchange和外接程序设置NGINX
您可以将NGINX上的
/your/api/route
之类的路由映射到您的应用程序,其余的所有调用都可以转移到exchange来处理
server{
server_name yourdomain.tld;
# Requests to be managed by your add-in
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
# Requests to be managed by exchange
location / {
proxy_pass http://localhost:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
listen 80;
}
通过这样做,exchange和外接程序将在同一端口上工作(无论您配置什么),cors将不会成为问题。如果使用
http://localhost
而不是http://127.0.0.1
您的URL?如果添加带有凭据的axios选项:true
,会发生什么情况?您的服务器是否使用cors npm包?据我所知,服务器没有使用cors npm
包。根据Office JS策略,承载Office插件的应用程序需要使用HTTPS进行安全保护,因此不能真正使用HTTPS。我使用凭据尝试了,但没有成功。此加载项托管在何处?换句话说,您的office加载项清单中的URL是什么?清单中的URL是https://localhost:3000
@HariMohan您的onprem服务器的url是什么?