Я создаю очень простой аутентифицированный веб-сайт для обучения, дающий пользователям возможность создать учетную запись, войти в систему и просматривать контент.
Проблема заключается в том, что зарегистрированные пользователи не видят на домашней странице (в качестве теста) после успешной регистрации. После публикации я перенаправляю пользователя обратно на домашнюю страницу, и маршрут get запускает функцию postgres, используя модуль node-postgres, чтобы получить всех пользователей в базе данных и вернуть их. Это не похоже на увольнение. Тем не менее, когда я запускаю ту же функцию в своей базе данных, я вижу нового пользователя.
Что странно, так это то, что когда я нажимаю Enter на домашнем маршруте в браузере, появляется новый пользователь. Так что я действительно не уверен, что это кеширование или неправильное понимание обещаний (я только начал вникать в это) или что-то еще.
Я попытался использовать обратные вызовы вместо обещаний, как показано здесь: https://node -postgres.com / features / query , чтобы увидеть, если это что-то меняет. Кроме этого, я добавил записи в журнал, чтобы увидеть, действительно ли обещание разрешается или отклоняется. Но, похоже, это всегда решает, поэтому я действительно не уверен, что здесь происходит.
<!-- register.ejs -->
<%- include('partials/header') %>
<div class="container mt-5">
<h1>Register</h1>
<div class="row">
<div class="col-sm-8">
<div class="card">
<div class="card-body">
<!-- Makes POST request to /register route -->
<form action="/register" method="POST">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" name="username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password">
</div>
<button type="submit" class="btn btn-dark">Register</button>
</form>
</div>
</div>
</div>
</div>
</div>
<%- include('partials/header') %>
\\index.js (in ./db)
const {
Pool
} = require('pg');
const pool = new Pool({
database: 'secrets'
});
module.exports = {
query: (text, params, callback) => {
return pool.query(text, params, callback)
}
};
//jshint esversion:6
/* Imports
* ================================================================================ */
const express = require('express');
const bodyParser = require('body-parser');
const db = require('./db');
const util = require('util');
/* App setup
* ================================================================================ */
const app = express();
app.disable('etag');
const port = 3000;
app.use(express.static(util.format("%s/%s", __dirname, 'public')));
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({
extended: true
}));
/* Routes
* ================================================================================ */
// Get request
app.get("/", function (req, res, next) {
db.query('SELECT * FROM dbo.usp_SelectUsers()')
.then(function(dbResult) {
console.log(dbResult.rows);
res.send(dbResult.rows);
}, (reason) => {
console.log("Not fulfilled :(");
}).catch(_err => next(_err));
});
// Post request for registration
app.post("/register", function (req, res, next) {
const queryText = 'SELECT dbo.usp_CreateUser($1, $2)';
const queryValues = [req.body.username, req.body.password];
db.query(queryText, queryValues)
.then(res.redirect("/"))
.catch(err => next(err))
});
CREATE OR REPLACE FUNCTION dbo.usp_SelectUsers()
RETURNS TABLE (User_ID INTEGER, User_Name VARCHAR(100)) AS
$func$
BEGIN
RETURN QUERY
SELECT u.User_ID
,u.User_Name
FROM dbo.User u
;
END
$func$ LANGUAGE plpgsql;
Ожидаемый результат - видеть новых пользователей в базе данных и отображаться на домашней странице ("/") после успешной публикации без необходимости повторного обновления страницы.