Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未设置标头node.js api推送通知_Javascript_Node.js_Api_Push Notification - Fatal编程技术网

Javascript 未设置标头node.js api推送通知

Javascript 未设置标头node.js api推送通知,javascript,node.js,api,push-notification,Javascript,Node.js,Api,Push Notification,你好,我正在尝试为我的webapp设置推送通知 我得到了我应该得到的订阅 它将正确地保存到我的数据库中 如果数据库中只有一个用户,它会像应该的那样发送我的通知 我想发送给不止一个用户:) 即时通讯使用: Vue.js(框架) Axios(邮政) node.js(api) mongoDB(数据库) 这是我在API上的帖子 await axios({ method: 'post', url: 'API', data: {

你好,我正在尝试为我的webapp设置推送通知

我得到了我应该得到的订阅

它将正确地保存到我的数据库中

如果数据库中只有一个用户,它会像应该的那样发送我的通知

我想发送给不止一个用户:)

即时通讯使用:

  • 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也尝试设置头。您应该只使用
webpush.sendNotification(订阅,负载).catch(err=>console.error(err))

您收到此错误,因为res.status(201).json({})已经设置了头并将响应发送回客户端,但是webpush.sendNotification也尝试设置头。您应该只使用
webpush.sendNotification(订阅,负载).catch(err=>console.error(err))
res.json([body])
设置相应的头并发送结果:

发送JSON响应。此方法发送一个响应(具有正确的内容类型),该响应是使用JSON.stringify()转换为JSON字符串的参数

所以,首先,您不需要手动设置标题。 其次,如果
响应
包含多个项,因为您不能为一个请求发送多个结果,所以您不应该在
映射
中使用
res.json
。 此外,请注意
webpush.sendNotification
也可能发送结果。

res.json([body])
设置相应的头并发送结果:

发送JSON响应。此方法发送一个响应(具有正确的内容类型),该响应是使用JSON.stringify()转换为JSON字符串的参数

所以,首先,您不需要手动设置标题。 其次,如果
响应
包含多个项,因为您不能为一个请求发送多个结果,所以您不应该在
映射
中使用
res.json

此外,请注意
webpush.sendNotification
,它可能也会发送结果。

您收到此错误是因为
res.status(201).json({})
已经设置了头并将响应发送回客户端,但是
webpush.sendNotification
也在尝试设置头。出现此错误的原因是
res.status(201).json({})
已经设置了标题并将响应发送回客户端,但是
webpush.sendNotification
也在尝试设置标题。嘿,非常感谢!它可以工作,但现在我在发送通知后收到一个超时:
“加载URL失败:请求的资源上不存在“访问控制允许源站”标头。因此不允许访问源站“URL”。响应的HTTP状态代码为503。”
在res.setHeader?
var options={headers:{Access Control Allow Origin',“*”,“'Access Control Allow headers':'“Origin,x-Requested-With,Content Type,Accept”}中的选项参数中,将它们添加到您的请求头中(订阅、有效负载、选项)
让我们来看看。嘿,非常感谢!它可以工作,但现在在发送通知后我得到一个超时:
“加载URL失败:请求的资源上不存在“Access Control Allow Origin”头。因此不允许访问源“URL”。响应的HTTP状态代码为503。”
在res.setHeader?
var options={headers:{Access Control Allow Origin',“*”,“'Access Control Allow headers':'“Origin,x-Requested-With,Content Type,Accept”}中的选项参数中,将它们添加到您的请求头中(订阅、有效负载、选项)
让我们来看看。非常感谢!但现在我在发送通知后收到一个超时:“加载URL失败:请求的资源上不存在“访问控制允许源站”标头。因此不允许访问源站“URL”。响应的HTTP状态代码为503。”非常感谢!但现在我在发送通知后收到一个超时:“加载URL失败:请求的资源上不存在“访问控制允许源站”标头。因此不允许访问源站“URL”。响应的HTTP状态代码为503。”