Как отправить данные раскрывающейся формы в MongoDB с помощью Express / nodejs? - PullRequest
0 голосов
/ 23 февраля 2020

Извините, если это глупый вопрос, я супер новичок в express и mongodb / mon goose, поэтому не уверен, что я делаю неправильно. Я пытаюсь создать несколько раскрывающихся меню, в которых пользователь может выбрать из каждого раскрывающегося списка, а затем нажать кнопку отправить, чтобы отправить запрос POST в мою базу данных. У меня получилось работать с формой, в которой вы вводите свои собственные данные, но я только хочу, чтобы пользователь мог выбрать из выпадающего списка ...

вот выпадающая форма, я пытаюсь создать запрос POST от:

<form action="/environments" method="POST"></form>
    <select>
        <% environments.forEach(function(environment){ %>
        <option value="name"><%= environment.name %></option>
        <% }); %>
    </select>
    <select>
        <% environments.forEach(function(environment){ %>
        <option value="region"><%= environment.region %></option>
        <% }); %>
    </select>
    <input type="submit" />
</form>

вот мое приложение. js

var express = require("express"),
  app = express(),
  mongoose = require("mongoose"),
  bodyParser = require("body-parser");

mongoose.connect("mongodb://localhost/epims", {
  useNewUrlParser: true,
  useUnifiedTopology: true
});
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");

//schema setup
var environmentSchema = new mongoose.Schema({
  name: String,
  region: String
});

var Environment = mongoose.model("Environment", environmentSchema);

//DISPLAY ALL ENVIRONMENTS IN DB
app.get("/environments", function(req, res) {
  //get all environments from db
  Environment.find({}, function(err, allEnvironments) {
    if (err) {
      console.log(err);
    } else {
      res.render("environments", { environments: allEnvironments });
    }
  });
});

//POST FORM DATA TO DB
app.post("/environments", function(req, res) {
  //get data from form and add to db
  var name = req.body.name;
  var region = req.body.region;
  var newEnvironment = { name: name, region: region };
  //create new env and save to db
  Environment.create(newEnvironment, function(err, newlyCreated) {
    if (err) {
      console.log(err);
    } else {
      //redirect back to environments
      res.redirect("/environments");
    }
  });
});

1 Ответ

1 голос
/ 23 февраля 2020

Вы должны установить имя для каждого тега выбора. В вашем случае это будут name и region, потому что это значения, которые вы хотите отправить обратно на сервер.

Затем в каждом теге option каждого тега select необходимо установите для них значение, если вы установите <option value="name"><%= environment.name %></option>, это означает, что вы всегда возвращаете значение name для каждого выбора.

Наконец, код e js (я так думаю) будет выглядеть так:

<form action="/environments" method="POST"></form>
    <select name="name">
        <% environments.forEach(function(environment){ %>
        <option value="<%= environment.name %>"><%= environment.name %></option>
        <% }); %>
    </select>
    <select name="region">
        <% environments.forEach(function(environment){ %>
        <option value="<%= environment.region %>"><%= environment.region %></option>
        <% }); %>
    </select>
    <input type="submit" />
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...