Мне просто было интересно, как добавить данные ( pu sh) в массив через конечную точку маршрутизатора express. Предположим, у меня есть массив внутри каталога data/data.js
, и мой код маршрутизатора выглядит так:
const express = require('express');
const bodyParser = require('body-parser');
const productRouter = express.Router();
//! bring data
const { products } = require('../data/data');
productRouter.use(bodyParser.json());
productRouter
.route('/')
.post((req, res, next) => {
if (req.body !== null) {
//some logic
} else {
products.push(req.body);
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(products);
}
} else {
//handle error
}
});
module.exports = productRouter;
Когда я использую метод POST в конечной точке моего маршрута, он получает sh новые данные и ответ с обновленный массив. Но когда я проверяю свой файл express, это все еще старый массив. Почему я потерял данные?
Сердечно благодарю, если кто-нибудь поможет мне в этом разобраться.
Поскольку @Aditya toke и @Andre Nuechter предложили мне обновить свой код следующим образом:
.post((req, res, next) => {
if (req.body !== null) {
if (products.some((product) => product.id === req.body.id)) {
err = new Error('Product with id:' + req.body.id + ' already exit');
err.status = 404;
return next(err);
} else {
const data_path = path.join(__dirname, '../data/data.js');
fs.appendFileSync(data_path, JSON.stringify(req.body));
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.json(products);
}
} else {
err = new Error('Body didnot contain product information');
err.status = 404;
return next(err);
}
});
Но он выталкивает новые данные следующим образом:
exports.products = [
{
title: 'camera',
imageUrl: 'https://source.unsplash.com/gGgoDJRD2WM/300x300',
id: 1,
},
...
]
exports.orders = [];
{"title":"mens","imageUrl":"https://source.unsplash.com/1-nx1QR5dTE/300x300","id":"6"}
Это не то, что я хочу. Есть ли способ добавить это в массив товаров? Или какой-нибудь лучший подход?