Я создаю сайт электронной коммерции, используя node.js с инфраструктурой next.js для SSR и firebase / firestore в качестве базы данных.
Я успешно заставил сайт получать данные и отображать данные из firestoreНа мой взгляд, это показывает все доступные продукты.Теперь я хочу иметь возможность щелкнуть продукт и перейти на отдельную страницу продукта, где он отображает дополнительную информацию + параметры продукта.Я использую уникальный номер SKU, которому я назначил продукты для справки, чтобы получить правильные данные из пожарного магазина.
Однако, когда я нажимаю на элемент и перенаправляюсь на эту страницу, я получаю сообщение об ошибке, что stringSKUневерный третий аргумент.Как только я обновляю страницу, я получаю ожидаемый результат.
Я использовал 'await', чтобы получить stringSKU до того, как обещание произойдет, и запись в консоль до того, как обещание произойдет, даст правильное значение.Вот мой код.
export default class Product extends React.Component {
static async getInitialProps(context) {
const obj = await context.query;
const stringSKU = await obj.SKU
//Displays the correct string value
console.log(stringSKU)
let firebase= await loadFirebase()
let result = await new Promise((resolve, reject) =>
{
//this is where the error occurs
firebase.firestore().collection('products')
.where('SKU','==',stringSKU)
.get()
.then((snapshot) =>{
let data = []
snapshot.forEach((doc) => {data.push(Object.assign({id: doc.id }, doc.data())) })
resolve(data)
})
.catch(error => {
reject([])
})
})
return {products: result}
}
Кроме того, поскольку я пытаюсь извлечь только один элемент из базы данных Firebase, я чувствую, что использование forEach и помещение элемента в массив не лучший способ сделать это, и при этомиспользуя SKU для получения документов.
Любые предложения о том, как улучшить этот код, просто присваивая возвращаемый объект одной переменной и используя автоматически назначенный идентификатор пожарного хранилища, были бы великолепны!Извините, я javascript / node.js n00b:)