Не удается передать {{error}} в handlebars node.js , но передаются другие данные

#node.js #forms #express #handlebars.js

#node.js #формы #выразить #handlebars.js

Вопрос:

Я новичок с node.js и руль. Не уверен, что здесь делать. Я передаю данные в handlebars из своего кода для отображения «учетная запись / регистрация». Таким образом, «заголовок» работает, как и ожидалось, для вкладки страницы, а «ошибка» — нет. Кажется, все это сработает или ничего из этого не получится. Я подтвердил с помощью debug, что ошибка имеет значение на серверной части, но {{error}} в нижней части формы не отображается. Это всего лишь простая строка, которую я подтвердил, «требуется имя пользователя». Я пытался избежать этого {{error}} и тройных усов {{{error}}} , все равно ничего. Подумал, может быть, это отсутствующая зависимость, но заголовок передается. Я также пытался передавать данные как error, , error: test, , и даже пытался {{#each}} в форме. Никакой радости.

Что я делаю не так?

 const { request } = require('express');
const express = require('express');
const config = require('config');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const moment = require('moment');
const db = require('../db');
const authMiddleware = require('../middleware/auth');
const debug = require('debug')('app:routes:account');

// creating instance of router.
const router = express.Router();
router.use(express.urlencoded({ extended: false }));
router.use(express.json());
router.post('/register', async (req, res, next) => {
  try {
    const username = req.body.username;
    const email = req.body.email;
    const password = req.body.password;
    const password_confirm = req.body.password_confirm;
    debug(`username = ${username}`);
    debug(`email = ${email}`);
    debug(`password = ${password}`);
    debug(`passwordConfirm = ${password_confirm}`);

    // let user = null;
    let error = null;

    if (!username) {
      error = 'username is required';
    }
    
    if (error) {
      res.render('account/register', {
        title: 'Errors!',
        error: error,
        username: username,
      });
      debug(`error = ${error}`);
    }
  } catch (err) {
    next(err);
  }
});

module.exports = router;

  

И вот форма:

 <form id="register" method="POST" class="form needs-validation mt-3" novalidate>
  <div class="my-3 font-weight-bold text-center">Register Account</div>
  <div class="form-group">Please complete the following form to create an account on our website.</div>
  <div class="form-group">
    <label for="username">Username</label>
    <input id="username" name="username" class="form-control" type="text" value="{{username}}" required>
    <div class="invalid-feedback">Please enter a unique username.</div>
  </div>
  <div class="form-group">
    <label for="email">Email</label>
    <input id="email" name="email" class="form-control" type="email" value="{{email}}" required>
    <div class="invalid-feedback">Please enter a valid address.</div>
  </div>
  <div class="form-group">
    <label for="password">Password {{error}} </label>
    <input id="password" name="password" class="form-control" type="password" value="{{password}}" required>
    <div class="invalid-feedback"> Please enter your password.</div>
  </div>
  <div class="form-group">
    <label for="password_confirm">Confirm Password</label>
    <input id="password_confirm" name="password_confirm" class="form-control" type="password" value="{{password}}" required>
    <div class="invalid-feedback"> Please confirm passwords.</div>
  </div>
  <div class="form-group"><button class="btn btn-primary"><i class="far fa-save"></i>Login</button></div>
  <div class="form-group"><output class="text-danger"> {{error}} </output></div>
</form>
  

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

1. Оригинальный плакат здесь, имя пользователя также не передается. Просто заголовок страницы.

2. можете ли вы поделиться своей структурой проекта?

3. Привет, нишкауш, я не уверен, как я могу поделиться структурой проекта. Вы имеете в виду, что находится в моем проводнике?

4. Да, я чувствую, что проблема в том, как handlebars подключен к вашему основному файлу обработки маршрута. Можете ли вы попробовать создать другой файл шаблона HTML и попробовать передать ему некоторые случайные реквизиты, просто чтобы проверить, действительно ли это проблема с подключением..

5. Я попытался вставить его в свой main.handlebars, чтобы посмотреть, появится ли он. Не повезло. Я попытался изменить заголовок страницы на сообщение об ошибке, и это сработало, но ничего не могу получить в теле.

Ответ №1:

Я поиграл с этим и, наконец, заставил его работать, я изложил свое решение ниже. Это достаточно очевидно, глядя на это сейчас. Тем не менее, я работаю с чужим кодом, которому не нужно было делать то, что я сделал здесь. Может кто-нибудь объяснить, почему мой исходный код мог не сработать?

 router.post('/register', async (req, res, next) => {
  try {
    const username = req.body.username;
    const email = req.body.email;
    const password = req.body.password;
    const password_confirm = req.body.password_confirm;
    const data = {
      error: null,
    };
    if (!username) {
      data.error = 'username is required';
      res.render('account/register', {title: 'Errors!', data });
    }
  } catch (err) {
    next(err);
  }
});
  

И затем вот как я получил это для отображения в форме.

 <output class="text-danger">{{data.error}}</output>