Получить данные из mongodb в соответствии со значением в экспресс-маршруте - PullRequest
0 голосов
/ 20 октября 2019

Я хочу получить данные из mongodb в соответствии с одним значением из входных данных. Я реализовал это, но мне не удалось передать значение из внешнего интерфейса в запрос:

Вот код:

var express = require("express");
var app = express();
const mongoose = require("mongoose");
const ejs = require("ejs");
app.set("views engine", "ejs");
var bodyParser = require("body-parser");
let urlencodedParser = bodyParser.urlencoded({ extended: false });
app.use(bodyParser.urlencoded({ extended: false }));

mongoose.connect("mongodb://localhost:27017/Test", { useNewUrlParser: true });
const userScheme = mongoose.Schema(
  { name: String, age: Number },
  { versionKey: false }
);
const User = mongoose.model("users", userScheme);

// Get data from input and send it to mangodb
app.post("/", urlencodedParser, function(req, res) {
  // res.send('welcome, ' + req.body.newName)
  console.log(req.body.newName);
  const myname = req.body.newName;
});
// Fetch data from mangodb
User.find({ name: myname }, function(err, result) {
  mongoose.disconnect();
  if (err) return console.log(err);
  // Send data to ejs file
  console.log(result);
  const a = result;
  app.use("/", function(request, response) {
    response.render("index", { user: a });
  });
});
// Create server
app.listen(4000, function() {
  console.log("Example app listening on port 3000!");
});

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

Некоторые точки, не отмеченные здесь кодом:

  1. Запрос User.find() должен быть внутри контроллера маршрута
  2. Хотя неплохо закрыть mongoose connection, если процесс умирает или останавливается, но не при каждом успешном запросе. То же самое касается создания соединения, которое должно произойти один раз при запуске сервера.
  3. Нет необходимости в app.use между ними для рендеринга ответа (индекса).
  4. Нет необходимостииспользуйте urlencodedParser на уровне маршрута, поскольку он уже зарегистрирован на уровне приложения с помощью app.use(bodyParser.urlencoded({ extended: false }));

Код маршрута должен выглядеть следующим образом:

//route for page load -index page 
app.get('/', function(req, res) {
    return res.render("index");
});

// Get data from input and send it to mongodb
app.post("/", function(req, res) {
  // res.send('welcome, ' + req.body.newName)
  console.log(req.body.newName);
  const myname = req.body.newName;

  // Fetch data from mongodb
  User.find({ name: myname }, function(err, result) {
    if (err) {
      console.log(err);
      return;
    }
    // Send data to ejs file
    console.log(result);
    const a = result;

    return res.render("index", { user: a });
  });
});
0 голосов
/ 20 октября 2019
Please use following code
app.post('/', urlencodedParser, function (req, res) {
  const myname = req.body.newName;

  // Fetch data from mangodb
  User.find({name:myname},function(err, result){
     if(err) return console.log(err);
     const a = result;
     return res.render("index", { user: a});
   });
})
...