Помните, что require
кэширует модули и все последующие вызовы require
получают одинаковые вещи, поэтому напишите что-нибудь, что экспортирует функцию или класс, чтобы вы могли безопасно вызывать / создавать экземпляры без переменные становятся общими.
Например:
const db = require(`your/db/connector`);
const Mapper = {
addToMessageMapping: async function(messageId, contactId) {
const query = `
INSERT IGNORE INTO messages_mapping (message_id, contact_id)
VALUES (${message_id}, ${contact_id});
`;
...
return db.run(query);
},
...
}
module.exports = Mapper;
И, конечно, это тоже мог быть класс или даже эта функция напрямую - единственное, что меняется, это то, как вы делаете это запустите эту функцию не конфликтуя с любым другим вызовом.
Теперь потребители этого кода просто верят, что следующее не имеет побочных эффектов:
const mapper = require('mapper.js');
const express, app, etc, whatever = ...
....
app.post(`/api/v1/mappings/message/:msgid`, (req, res, next) => {
const post = getPOSTparamsTheUsualWay();
mapper.addToMessageMapping(req.params.msgId, post.contactId)
.then(() => next());
.catch(error => next(error));
}, ..., moreMiddleware, ... , (req,res) => {
res.render(`blah.html`, {...});
});
Также обратите внимание на этот шаблон строки существуют в частности для предотвращения компоновки строк путем конкатенации строк с +
, весь смысл в том, что они могут принимать ${...}
внутри них и шаблонить в «все, что находится в этих фигурных скобках» (переменные, вызовы функций , любой JS на самом деле).
(Второе, что у них есть, это то, что вы можете пометить их префиксом имени функции, и эта функция будет работать как часть шаблонного действия, но не нужно многим людям это на ежедневной основе. ${...}
шаблонизирует, хотя? Каждый день, тысячи раз).
И, конечно, последнее замечание: похоже, вы создаете raw SQL, w Это всегда плохая идея. Используйте подготовленные операторы для любой библиотеки базы данных, которую вы используете: она поддерживает их и означает, что любой ввод пользователя сделан безопасным Прямо сейчас кто-то может опубликовать в вашем API с идентификатором сообщения ); DROP TABLE messages_mapping; --
и готово: ваша таблица исчезла. Веселые времена.