У меня проблема с написанием Cloud SQL и Google App Engine. Используя NoSQL с Cloud SQL и Google App Engine для записи в БД, мне удалось установить соединение - и это здорово!
Единственная проблема в том, что когда я запускаю функцию вставки для приложения insertVisit(knex, visit)
, существует несколько записей для одного вызова. Вот весь соответствующий код.
app.js
//Connecting to the NoSQL Cloud SQL database, and using Knex to do all database-y things.
const knex = connect();
function connect () {
const config = {
socketPath: "/cloudsql/<INSTANCE_CONNECTION_NAME>",
user: "USERNAME",
password: "PASSWORD",
database: "DATABASE"
};
// Connect to the database
const knex = Knex({
client: 'mysql',
connection: config
});
return knex;
}
function insertVisit (knex, visit) {
return knex('user_visits').insert(visit);
}
}
function getVisits (knex) {
return knex.select().table('user_visits').pluck('visits')
}
Окончание App App
app.get('/new_visit', (req, res, next) => {
// Create a visit record to be stored in the database
const visit = {
visits: new Date()
}
insertVisit(knex, visit)
// return a response
.then(() => {
res
.status(200)
.set('Content-Type', 'text/plain')
.send(`successfully created.`)
.end();
})
.catch((err) => {
next(err);
});
});
app.get('/see_visits', (req, res, next) => {
getVisits(knex)
.then( (visits) => {
res
.status(200)
.set('Content-Type', 'text/plain')
.send(`Last 10 visits:\n${visits.join('\n')}`)
.end();
})
})
Я возвращаю все просто отлично. Но когда я посещаю new_visit
один раз, а затем see_visits
, я ожидаю ответа на веб-странице, скажем:
Last 10 Visits:
Aug 10 12:34:56
Aug 11 23:11:45
Вместо этого я знаю, происходят двойные (или тройные) вызовы, потому что я получаю:
Last 10 Visits:
Aug 10 12:34:56
Aug 10 12:34:57
Aug 10 12:34:57
Aug 11 23:11:45
Aug 11 23:11:46
Соответствующие app.yaml поля следующие:
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
Какие предложения по умолчанию от Google.
Есть ли у кого-нибудь какие-либо идеи или ... какие-либо знания о том, что я могу сделать, чтобы предотвратить эти двойные, тройные записи? Это огромная дыра в кармане, если дублирующие данные пишутся каждый раз, когда я пытаюсь вставить больше информации в таблицу.