标头未设置 node.js api 推送通知
Posted
技术标签:
【中文标题】标头未设置 node.js api 推送通知【英文标题】:Headers not set node.js api push notification 【发布时间】:2018-09-19 12:21:21 【问题描述】:您好,我正在尝试为我的 web 应用设置推送通知。
我得到了我应该得到的订阅。
它会正确地将其保存到我的数据库中。
如果数据库中只有一个用户,它会发送我的通知
我想发送给不止一个用户:)
我正在使用:
Vue.js(框架)
Axios(发布)
node.js (api)
mongoDB(数据库)
这是我发给 API 的帖子。
await axios(
method: 'post',
url: 'API',
data:
subscription: JSON.stringify(subscription),
storeId: storeId
,
headers:
'Content-Type': 'application/json'
)
它注册了我的帖子,但随后我收到了抛出错误。 即“发送后无法设置标题。”
我在我的应用程序中使用 CORS,如下所示:
const cors = require('cors')
const app = express();
app.use(bodyParser.json());
app.use(cors())
app.use(morgan('combined'))
我从我的网站处理帖子的方式是找到我的订阅,然后映射并说出 foreach 订阅
网络推送
//subscribe routes
app.post('/pushNotification', (req, res) =>
var storeId = req.body.storeId
res.setHeader('Content-Type', 'application/json');
console.log(storeId)
if (req.body.storeId != null)
console.log('Test1')
//get pushSubscription object
//create payload
const payload = JSON.stringify( title: 'push test' )
Push.find(
"storeId": storeId
,
'subscription', function(error, response)
console.log('Test2')
console.log(response)
response.map(item =>
res.status(201).json();
console.log('Test3')
var subscription = item.subscription
console.log(subscription)
webpush.sendNotification(subscription, payload).catch(err => console.error(err));
)
)
else
res.send("failed")
)
正如我在某处所读到的那样,我没有设置标题或正确的东西。我在教程和其他东西中使用过cors。
所以它就像是因为迭代错误而崩溃。 但我不知道怎么做。
错误信息:
提前致谢
【问题讨论】:
您收到此错误是因为res.status(201).json()
已经设置了标头并将响应发送回客户端,但webpush.sendNotification
也尝试设置标头。
【参考方案1】:
您收到此错误是因为 res.status(201).json() 已经设置了标头并将响应发送回客户端,但 webpush.sendNotification 也尝试设置标头。您应该只使用 @ 987654322@
【讨论】:
嘿,非常感谢!它有效,但现在我在发送通知后超时:"Failed to load URL: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'URL' is therefore not allowed access. The response had HTTP status code 503."
将这些添加到您的请求标头Access-Control-Allow-Headers': 'x-access-token
在 res.setHeader?
var options=headers: "Access-Control-Allow-Origin", "*", '"Access-Control-Allow-Headers"': '"Origin, X-Requested-With, Content-Type, Accept"'
在 sendNotification(subscription,payload,options)
的 Options 参数中
让我们continue this discussion in chat。【参考方案2】:
res.json([body])
设置相应的header并发送结果:
发送 JSON 响应。此方法发送一个响应(具有正确的内容类型),该响应是使用 JSON.stringify() 转换为 JSON 字符串的参数。
所以,首先您不需要手动设置标题。
其次,如果response
有多个项目,由于您无法为请求发送多个结果,因此您不应在map
中使用res.json
。
此外,请注意webpush.sendNotification
,它也可能会发送结果。
【讨论】:
非常感谢!但现在我在发送通知后超时:“无法加载 URL:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。因此不允许访问源 'URL'。响应包含 HTTP状态码 503。”以上是关于标头未设置 node.js api 推送通知的主要内容,如果未能解决你的问题,请参考以下文章
Azure 移动应用 Node.js 后端 - 推送通知错误状态代码 400
Azure-> Node.js 中的 Easy api-> 如何发送 android 推送通知?
如何在 MobileFirst Foundation 8 中使用 REST API 从 Node.js 发送推送通知?