Я бы предложил внести несколько изменений в ваш код следующим образом:
app.js
const app = require('express')
const db_functions = require('./db_functions')
app.get('/save_a_new_visit', (req, res, next) => {
db_functions.saveAVisit()
.then(() => {
res.sendStatus(200)
next()
})
})
и
db_functions.js
const knex = require('knex')
module.exports.saveAVisit = async () => {
console.log('You are saving a new visit')
const visit = { visits: new Date() }
return await knew('this_is_an_example').insert(visit)
}
В коде app.js
я изменил имя вашей переменной импорта модуля Express, чтобы она соответствовала вашему объявлению маршрута RESTful под этими операторами импорта. Кроме того, я добавил вызов метода в вашу цепочку обещаний, вызвав функцию saveAVisit()
. Я не указал никаких параметров для этой функции, потому что в действительности вам не нужно ничего определять в этой функции, как вы можете видеть во втором фрагменте кода. Наконец, я добавил вызов функции next()
, так как вы включили ее в список параметров для определения маршрута, и если вы обращаете внимание на прохождение функции next()
, вам следует убедиться, что вы вызываете ее.
В вашем коде db_functions.js
я изменил определение вашей функции, включив в него префикс, чтобы эта функция была фактически доступна для любого импортирующего кода, который пытается импортировать этот модуль. Во-вторых, я определил функцию как асинхронную, используя ключевое слово async
. Я делаю это так, чтобы вы могли использовать ключевое слово await
, когда определяете реальную логику интерфейса базы данных в теле функции. Пожалуйста, ознакомьтесь с документацией async и await для получения дополнительной информации и примеров использования этих двух специальных ключевых слов. Я также удалил заданный вами параметр функции, потому что нет необходимости передавать экземпляр модуля knex
, когда вы уже импортируете его вверху определения модуля. Наконец, поскольку я предполагаю, что функция knex.insert()
является асинхронной, перед этим вызовом я добавил ключевое слово await
, чтобы код ожидал ответа от базы данных, прежде чем вернуться к выполняющейся функции.
Внесение этих нескольких изменений в ваш код должно привести к тому, что код вашей базы данных больше не будет вызываться при импорте модуля. Если проблема не устранена после внесения этих изменений, возможно, в вашем приложении есть дополнительный код, который вы не предоставили выше, что приводит к такому поведению. Если это так, пожалуйста, отредактируйте свое сообщение и добавьте этот код, чтобы я мог помочь вам исправить его.