Как отобразить результат app.POST() в HTML-представлении в режиме начальной загрузки (node.js)

#javascript #html #node.js #jquery-ui #bootstrap-modal

Вопрос:

Я хочу отобразить результат входа в систему в HTML-файле. Если вход в систему успешен, то res.render(__dirname «home.html», {результат:результат}); и показать модальный «Успешно вошел в систему». И если не удается, отрисовывайте в тот же файл, который login.html и покажите тост «Не удалось войти».

Как написать эту функцию?

index.js

 const login = require('./login');
const enrollUser = require('./enrollUser');

// Define Express app settings
app.use(cors());
app.use(express.json()); // for parsing application/json
app.use(express.urlencoded({ extended: true })); 

app.set('views', __dirname   '/template/demo');
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

app.use(express.static(__dirname   '/template/demo')); 

app.get('/', function (req, res) {  
   res.sendFile( __dirname   "/template/demo/"   "login.html" );  
});

app.post('/login', (req, res) => {
    login.execute(req.body.username)
            .then(() => {
                console.log('Logged in successfully');
                const result = {
                    status: 'success',
                    message: 'Logged in successfully',
                    username: req.body.username
                };
                res.render( __dirname   "/template/demo/"   "index.html", {result:result});
            })
            .catch((e) => {
                const result = {
                    status: 'error',
                    message: 'Failed',
                    error: e
                };
                res.render( __dirname   "/template/demo/"   "login.html", {result:result});             
            });
});
 

login.html

  <form method="POST" action="/login" id="reg-form">
    <input type="text" class="form-control" name="uname" id="uname">
    <div class="col-lg-6 login-btm login-button">
    <button type="submit" id="login" onclick="login()">LOGIN</button></div>
    </form>
<%= result.message %>
 

Комментарии:

1. Это описано в Экспресс-документации: expressjs.com/en/guide/using-template-engines.html

Ответ №1:

В настоящее время он не будет отображать его динамически. Вам нужно использовать ejs или любой другой движок шаблонов для рендеринга HTML-страницы, тогда вы могли бы использовать что-то подобное response.render('login.ejs', { result }) и т. Д.