Быстрое сохранение почтового запроса как неопределенного в БД - PullRequest
0 голосов
/ 19 июня 2019

Я учусь настраивать сервер Express и столкнулся со странной проблемой при создании новых пользователей.Запрос POST проходит и не выдает ошибки, и переносит меня на панель инструментов, но когда я просматриваю базу данных sqlite, он показывает все значения из регистрационной формы, сохраненные как неопределенные.Я установил body-parser и правильно вызвал его на сервер.

Я попытался изменить расширенный: true вместо false и добавил добавление res.setHeader ('Content-Type', 'text / plain') в app.use, как указано в руководстве по анализу тела, но это все ещекаждый раз сохраняется как неопределенное.

вот мой код server.js

const app = express();
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.setHeader('Content-Type', 'text/plain');
  next();
});

вот код POST в файле server.js

app.post('/register', function(req, res) {
  bcrypt.hash(req.body.password, saltRounds, function(err, hash) {
    let db = new sqlite3.Database("./database/InvoiceApp.db");
    let sql = `INSERT INTO users(name, email, company_name, password) VALUES ('${req.body.name}','${req.body.email}','${req.body.company_name}','${hash}')`;
    db.run(sql, function(err) {
      if (err) {
        throw err;
      } else {
        return res.json({
          status: true,
          message: "User Created"
        });
      }
    });
    db.close()
  });
});

и этомой код формы, я использую vue.js

register () {
      const formData = new FormData()
      let valid = this.validate()
      if (valid) {
        formData.append('name', this.model.name)
        formData.append('email', this.model.email)
        formData.append('company_name', this.model.company_name)
        formData.append('password', this.model.password)

        this.loading = "Registering you, please wait"

        axios.post('http://localhost:3128/register', formData).then(res => {
          this.loading = ''
          if (res.data.status === true) {
            this.$router.push ({
              name: 'dashboard',
              params: { user: res.data.user }
            })
          } else {
            this.status = res.data.message
          }
        })
      } else {
        alert('Passwords do not match')
      }
    }

Я не получаю сообщений об ошибках при создании нового пользователя, только если я пытаюсь войти в систему как созданный пользователь или выполнить другие действия, связанные с созданным пользователем.Почему моя форма сохраняется как неопределенная в sqlite DB?

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Потратив день на изучение FormData и JSON, я понял это благодаря этому посту и ответу M U. Потому что я использовал Vue.js и все, что в форме, сохранялось с использованием v-модели все, что мне нужно было сделать, это обновить метод записи:

register () {
      let valid = this.validate()
      if (valid) {
        this.loading = "Registering you, please wait"

        axios.post('http://localhost:3128/register', this.model).then(res => {
          this.loading = ''
          if (res.data.status === true) {
            this.$router.push ({
              name: 'dashboard',
              params: { user: res.data.user }
            })
          } else {
            this.status = res.data.message
          }
        })
      } else {
        alert('Passwords do not match')
      }
    }

и вся форма загружена в базу данных с хэшем пароля

0 голосов
/ 19 июня 2019

Вы должны использовать формат JSON из приложения Vue вместо FormData.FormData - это объект, который передается с Content-Type application/x-www-form-urlencoded.И ваш анализатор тела настроен для Json.Пожалуйста, попробуйте заменить

        formData.append('name', this.model.name)
        formData.append('email', this.model.email)
        formData.append('company_name', this.model.company_name)
        formData.append('password', this.model.password)

фактическим объектом JS {"name": this.model.name ..... другие поля .....}

и передайте этообъект или этот объект stringified с JSON.strinfigy (obj);

...