首先,请记住,我已经检查了其他类似的帖子,但没有找到正确的答案。
我开发了一个客户端/服务器应用程序。
客户端部分位于React中,并由“服务”节点Web服务器提供服务。它必须调用存储在我服务器上的REST服务。
服务器部分是koa服务器(即节点),并提供多种REST服务。
两者都安装在同一Raspberry Pi上。该Raspberry已连接到我的本地网络。我将网络的防火墙配置为打开端口以访问客户端和REST服务。我还在网络中声明了我的React网站,以使其可访问。
因此,我可以很好地访问我的网站。但是,当我尝试从那里(单击按钮)调用REST服务时,出现以下错误(在chrome中):请求的资源上没有“ Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://X.X.X.X”。该响应的HTTP状态代码为403。”
我试图在我的REST服务上安装koa-cors,但是没有运气。我尝试通过添加origin:true,然后添加origin:X.X.X.X,然后添加origin:true,凭证:true,来进行配置,但还是没有运气。
在网站上,我尝试通过X.X.X.X,本地主机,127.0.1.1访问REST服务,但没有更好的方法。
请帮助。
服务器定义的[EDIT]代码
const Koa = require('koa');
const app = new Koa();
const cors = require('koa-cors');
const PORT = 8067;
const Router = require('koa-router');
const router = new Router();
const Logger = require('koa-logger');
const respond = require('koa-respond');
const BodyParser = require('koa-bodyparser');
const log4jslogger = require('./libs/logger.js');
app.use(cors()); // << deprecated. Find better method ?
app.use(BodyParser({
enableTypes: ['json'],
jsonLimit: '5mb',
strict: true,
onerror: function (err, ctx) {
ctx.throw('body parse error', 422)
}
}))
app.use(respond());
// API routes
app.use(Logger());
router.use('/users', require('./routes/users'));
app.use(router.routes());
app.use(router.allowedMethods());
const server = app.listen(PORT, () => {
log4jslogger.warn(`${new Date()} : User server listening on port: ${PORT}`);
});
module.exports = app;