ReactJS No 'Access-Control-Allow-Origin'
ReactJS No 'Access-Control-Allow-Origin'
我有一个问题,从我的网站链接加载我的字体。关于我所看到的,在我的server.js中有一个错误,CORS不存在于我的头部。现在,我的问题是我将如何插入头到我的服务器。js有人能帮助我吗?
这里是错误
Font from origin 'my website link'被Cross-Origin资源共享策略阻止加载:请求的资源上没有'Access-Control-Allow-Origin'标头。Origin 'http://localhost:3001'因此不允许访问
const app = express();
//
// Tell any CSS tooling (such as Material UI) to use all vendor prefixes if the
// user agent is not known.
// -----------------------------------------------------------------------------
global.navigator = global.navigator || {};
global.navigator.userAgent = global.navigator.userAgent || 'all';
//
// Register Node.js middleware
// -----------------------------------------------------------------------------
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
//
// Authentication
// -----------------------------------------------------------------------------
app.use(expressJwt({
secret: auth.jwt.secret,
credentialsRequired: false,
getToken: req => req.cookies.id_token,
}));
app.use(passport.initialize());
app.get('/login/facebook',
passport.authenticate('facebook', { scope: ['email', 'user_location'], session: false })
);
app.get('/login/facebook/return',
passport.authenticate('facebook', { failureRedirect: '/login', session: false }),
(req, res) => {
const expiresIn = 60 * 60 * 24 * 180; // 180 days
const token = jwt.sign(req.user, auth.jwt.secret, { expiresIn });
res.cookie('id_token', token, { maxAge: 1000 * expiresIn, httpOnly: true });
res.redirect('/');
}
);
//
// Register API middleware
// -----------------------------------------------------------------------------
app.use('/graphql', expressGraphQL(req => ({
schema,
graphiql: true,
rootValue: { request: req },
pretty: process.env.NODE_ENV !== 'production',
})));
//
// Register server-side rendering middleware
// -----------------------------------------------------------------------------
app.get('*', async (req, res, next) => {
try {
let css = [];
let statusCode = 200;
const data = { title: '', description: '', style: '', script: assets.main.js, children: '' };
await UniversalRouter.resolve(routes, {
path: req.path,
query: req.query,
context: {
insertCss: (...styles) => {
styles.forEach(style => css.push(style._getCss())); // eslint-disable-line no-underscore-dangle, max-len
},
setTitle: value => (data.title = value),
setMeta: (key, value) => (data[key] = value),
},
render(component, status = 200) {
css = [];
statusCode = status;
data.children = ReactDOM.renderToString(component);
data.style = css.join('');
return true;
},
});
const html = ReactDOM.renderToStaticMarkup(<Html {...data} />);
res.status(statusCode);
res.send(`<!doctype html>${html}`);
} catch (err) {
next(err);
}
});
//
// Error handling
// -----------------------------------------------------------------------------
const pe = new PrettyError();
pe.skipNodeFiles();
pe.skipPackage('express');
app.use((err, req, res, next) => { // eslint-disable-line no-unused-vars
console.log(pe.render(err)); // eslint-disable-line no-console
const statusCode = err.status || 500;
const html = ReactDOM.renderToStaticMarkup(
<Html
title="Internal Server Error"
description={err.message}
style={errorPageStyle._getCss()}
userAgent={req.headers['user-agent']}> // eslint-disable-line no-underscore-dangle
{ReactDOM.renderToString(<ErrorPage error={err} />)}
</Html>
);
res.status(statusCode);
res.send(`<!doctype html>${html}`);
});
//
// Launch the server
// -----------------------------------------------------------------------------
/* eslint-disable no-console */
models.sync().catch(err => console.error(err.stack)).then(() => {
app.listen(port, () => {
console.log(`The server is running at http://localhost:${port}/`);
});
});
/* eslint-enable no-console */
直接来自本网站,关于在express中启用CORS:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/', function(req, res, next) {
// Handle the get for this route
});
app.post('/', function(req, res, next) {
// Handle the post for this route
});
可以按如下所示插入标题。这是我的项目没有任何问题。
// Where app -> const app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
顺便说一下,你可以改进你的代码,将路由逻辑从app.js中分离出来,并使用Router: http://expressjs.com/es/api.html#router
希望能有所帮助。
安装歌珥从npm,
npm install cors
并将其添加为中间件
app.use(cors());
google好运!
相关文章:
- 如何解决Access Control Allow Origin错误
- 由于响应中不存在“Access Control Allow Origin”标头,跨域请求停止工作
- XMLHttpRequest : 不被 access-control-allow-origin 所允许
- 可以在Access Control Allow Origin中指定端口
- Access Control Allow Origin阻止我访问google api,尽管使用了dataType:
- JSONP跨原点错误'不存在Access Control Allow Origin标头'
- 角度:原点http://localhost在Access Control Allow Origin标头中找不到
- Angular$resource调用不被Access Control Allow使用Safari接受,而被Chrome接
- Instagram API access_token request and Access-Control-Allow-
- 方法不允许 — 从 Angularjs 中的请求标头中删除 Access-Control-Request-Method
- Yahoo - OAuth2 - SocialAPI:在初始响应中不返回“Access-Control-Allow-Or
- 在 Safari 上使用通用分析的 Access-Control-Allow-Origin 不允许
- Windows上的CouchDB说请求的资源上不存在“Access-Control-Allow-Origin”标头
- XMLHttpRequest 无法加载 http No Access-Control-Allow-Origin head
- Emberjs/Chrome/FFox:预检中的数字 Access-Control-Request-Headers
- Simple XMLHttpRequest 失败,Access-Control-Allow-Origin 标头为 nul
- Flickr API OAuth Access Token request and Access-Control-All
- jquery.ajax Access-Control-Allow-Origin
- Chrome Origin 空值是 Access-Control-Allow-Origin 所允许的
- Angular JS$http Access-Control-Allow-Origin中的Credentials和通配符