Node.js экспортированных модулей поддерживают данные - PullRequest
0 голосов
/ 13 июля 2020
• 1000

Почему модуль поддерживает свое состояние только потому, что он экспортируется с помощью Node и обрабатывается с помощью express. js?

Также, что произойдет со stati c js файл, который будет содержать только сценарий, который должен быть вызван (скажем, например) в файл HTML, сохранит ли он свое состояние или будет перезагружаться каждый раз при перезагрузке страницы html?

const path = require('path');
const express = require('express');
const rootDir = require('../util/path');
const router = express.Router();

const products = [];


router.get('/add-product', (req, res, next) => {
  res.sendFile(path.join(rootDir, 'views', 'add-product.html'));
});


router.post('/add-product', (req, res, next) => {
  products.push({title: req.body.title});
  res.redirect('/');
});

exports.routes = router;
exports.products = products;

1 Ответ

1 голос
/ 13 июля 2020

Почему модуль поддерживает свое состояние только потому, что он экспортируется с помощью Node и обрабатывается с помощью express. js?

См. документацию для требуется . Значения, экспортируемые из модулей, по умолчанию кэшируются. Объекты обрабатываются по ссылке .

Если вам требуется модуль, который экспортирует объект (например, router), вы каждый раз получаете тот же объект. Поскольку это один и тот же объект, переменная products, закрытая модулем, является той же переменной, поэтому вы обращаетесь к одному и тому же массиву.

Также, что могло бы произойти с stati c js файл, который будет содержать только сценарий, который должен быть вызван (скажем, например) в файл HTML, будет ли он сохранять свое состояние или будет перезагружаться каждый раз при перезагрузке страницы html?

Это не будет использовать require, поэтому указанное кеширование не будет применяться.

Перезагрузка страницы также полностью перезапускает все JavaScript программы, встроенные в эту страницу, поэтому он будет сброшен на что бы ни говорилось в исходном коде, даже если это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...