Я учусь создавать базу данных и конечную точку с javascript и express на базе Firebase. И все работает нормально, пока я не попытаюсь добавить Middleware. Вот так без промежуточного ПО мой код выглядит так:
https://blahblah/api/newpost
Вот так выглядит запрос:
app.post('/newpost', (req, res) => {
const newPost = {
userHandle: req.body.handle,
field: req.body.field,
text: req.body.text,
createdAt: new Date().toISOString()
};
db
.collection('posts')
.add(newPost)
.then(doc => {
res.json({ message: `Document with ID: ${doc.id} has been created` });
})
.catch(err => {
res.status(500).json({ error: 'Something went wrong' });
console.error(err);
})
})
Все отлично работает там. Но затем я пытаюсь добавить это промежуточное программное обеспечение:
const FBAuth = (req, res, next) => {
let idToken;
if(req.headers.authorization && res.headers.authorization.startsWith('Bearer ')){
idToken = req.header.authorization.split('Bearer ')[1];
} else {
console.error('No token found');
return res.status(403).json({error: 'Unauthorized'});
}
admin.auth().verifyIdToken(idToken)
.then(decodedToken => {
req.user = decodedToken;
console.log(decodedToken);
return db.collection('users')
.where('userId', '==', req.user.uid)
.limit(1)
.get()
})
.then(data => {
req.user.handle = data.docs[0].data().handle;
return next();
})
.catch(err => {
console.error('Error while verifying token', err);
return res.status(403).json(err);
})
}
И теперь код запроса на публикацию выглядит следующим образом:
app.post('/newpost', FBAuth, (req, res) => {
const newPost = {
userHandle: req.user.handle,
field: req.body.field,
text: req.body.text,
createdAt: new Date().toISOString()
};
db
.collection('posts')
.add(newPost)
.then(doc => {
res.json({ message: `Document with ID: ${doc.id} has been created` });
})
.catch(err => {
res.status(500).json({ error: 'Something went wrong' });
console.error(err);
})
})
Поэтому в основном я добавляю промежуточное программное обеспечение и вместо получения userHandle из тела запроса Я получаю его от пользователя, предоставленного промежуточным программным обеспечением, так же, как парень из учебного пособия, но, возможно, этот способ устарел? Как я получаю сообщение об ошибке, когда парень из учебника не ...
Это ошибка:
<code><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Internal Server Error
I добавьте носитель авторизации к заголовкам. Что может быть не так?