我需要一双新鲜的眼睛。
我正在尝试使用一个简单的Express应用程序来返回一些json(它恰好是Firebase令牌,但这不相关)每次发出请求时。
这是我的Express服务器代码:
app.get('/validate', function (req, res) {
var customToken = firebase.auth().createCustomToken(req.query.token);
res.json({
token: customToken
});
});
app.listen(8000, function () {
console.log('Listening on port 8000');
});
这是来自客户端的请求(侦听端口3000):
export function login() {
return fetch('http://localhost:8000/validate?token=666', {
method: 'GET',
mode: 'no-cors',
headers: new Headers({
'Authorization': apiClient.headers.Authorization,
'Content-Type': 'application/json'
})
})
.then(response => console.log('RESPONSE: ', response.json()))
.catch(response => console.error('ERROR: ', response));
}
Express应用似乎工作正常,因为当我在浏览器中打开http://localhost:8000/validate?token=666
时,我可以看到我需要的json。
但是,当我发出客户端请求时,我收到此错误
Uncaught (in promise) SyntaxError: Unexpected end of input
这就是响应日志的样子
RESPONSE: Promise {[[PromiseStatus]]: "rejected", [[PromiseValue]]: SyntaxError: Unexpected end of input
at SyntaxError (native)
at eval (eval at <anonymous> (h…}__proto__: Promise[[PromiseStatus]]: "rejected"[[PromiseValue]]: SyntaxError: Unexpected end of input
at SyntaxError (native)
at eval (eval at <anonymous> (http://localhost:3000/main.js:1381:2), <anonymous>:78:42)message: "Unexpected end of input"stack: "SyntaxError: Unexpected end of input↵ at SyntaxError (native)↵ at eval (eval at <anonymous> (http://localhost:3000/main.js:1381:2), <anonymous>:78:42)"get stack: stack()set stack: stack()__proto__: Error
login.js?b88c:54
任何关于我做错的指示都将不胜感激。
答案 0 :(得分:1)
有一个类似的问题,经过一些研究,我意识到{ mode: 'no-cors' }
存在的唯一原因是不能直接访问的不透明响应。要访问响应,您需要使用Cache API对其进行缓存,然后再与服务工作者一起使用。
我最后通过将Access-Control-Allow-Origin: *
标题添加到我的服务器端来解决这个问题(确保此设置对您来说在生产中是安全的,并且您绝对相信您是唯一能够提出请求的人到您的服务器)+从请求中删除mode:'no-cors'
选项。
答案 1 :(得分:0)
如果它对任何人有帮助,我已经通过添加
解决了我的问题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();
});
到服务器端代码。