一些背景
我已经创建了一个服务工作者来向注册用户发送通知。
它工作得很好,直到我试图实现一种id到每个人谁注册到一个服务工作者(发送通知)。
- 我这样做是因为我必须从我的数据库中删除旧的注册,所以我选择让每个用户三个注册(一个用于移动的设备,另外两个用于计算机上的不同导航器),如果有更多的注册,我想从数据库中删除旧的注册。*
工具
我使用nodejs、express和mySql作为数据库。
问题
启动订阅时出现以下错误:
SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
我在另一篇文章中看到,这是因为他们试图对已经是对象内容进行JSON.parse。
但在我的例子中,我找不到我解析的地方,看到的是哪个部分:
// service.js (service worker file)
// saveSubscription saves the subscription to the backend
const saveSubscription = async (subscription, usrCode) => {
const SERVER_URL = 'https://mywebsite:4000/save-subscription'
subscription = JSON.stringify(subscription);
console.log(subscription); // I got here what I expect
console.log(usrCode); // <-------------------------------- HERE I GOT UNDEFIND
const response = await fetch(SERVER_URL, {
method: 'post',
headers: {
'Content-Type' : 'application/json',
},
body : {
subscription: subscription,
usrCode: usrCode
}
})
return response
}
但是当我在检查器中使用console.log(usrCode)时,我得到了很好的值。
那么,我应该如何获取service.js中的值
也许问题就出在:
const bodyParser = require('body-parser')
app.use(bodyParser.json())
一开始我以为问题是从后面来的(因为我不太擅长异步函数)。
这是背面,如果我弄错了什么.
// index.js (backend)
// Insert into database
const saveToDatabase = async (subscription, usrCode) => {
// make to connection to the database.
pool.getConnection(function (err, connection) {
if (err) throw err; // not connected!
console.log(usrCode);
console.log(subscription);
connection.query(`INSERT INTO webpushsub (webpushsub_info, webpushsub_code) VALUES ('${subscription}', '${usrCode}')`, function (err, result, fields) {
// if any error while executing above query, throw error
if (err) throw err;
// if there is no error, you have the result
console.log(result);
connection.release();
});
});
}
// The new /save-subscription endpoint
app.post('/save-subscription', async (req, res) => {
const usrCode = req.body.usrCode; // <------------------ I'm not sure about this part
const subscription = req.body.subscription
await saveToDatabase(JSON.stringify(subscription, usrCode)) //Method to save the subscription to Database
res.json({ message: 'success' })
})
1条答案
按热度按时间nkoocmlb1#
通过google搜索,我找到了this tutorial .所以usrCode未定义的原因是因为服务工作者不能访问存储在前面的数据.首先你必须在URL中传递它,如下所示:
然后又把它弄到服务工人的身上: