Не удается получить значение из поля ввода Express Pug - PullRequest
0 голосов
/ 20 сентября 2018

Я не понимаю, почему я не могу правильно получить значение, введенное в поле ввода в коде pug ниже.У меня есть аналогичные разделы в этом файле, которые написаны практически одинаково, и они работают нормально, но по какой-то причине я не могу извлечь значение title из поля ввода при ссылке на него из моего кода express.

index.pug html code:

section(class="get")
h3 Get Data By Title
form(action="/get-data",method="get")
  div(class="input")
    label(for="title") Title
    input(type="text", id="title", name="title")
  button(type="submit") LOAD
div
  if posts
    each val in items
      article(class="item")
        div Title: #{val.title}
        div Content: #{val.content}
        div Author: #{val.author}
        div ID: #{val._id}

И код express в моем файле index.js, где я пытаюсь получить значение из input с помощью id="title" и использовать его для запроса к моей базе данных:

router.get('/get-data', function(req, res, next) {
  console.log("get-data")
  var item = {
    title: req.body.title
  };
  console.log(item);
  // Use mongoose to find data from database
  UserData.find(item)
      .then(function(doc) {
        console.log(doc)
        res.render('index', {title:"Movie Database",items: doc});
      }).catch(err => console.log(err));
});

Когда я просматриваю вывод консоли, я вижу, что не получаю никакого значения, несмотря на то, что введенное мной значение появляется в моем get URL-адресе запроса.

0|myapp_node  | get-data
0|myapp_node  | { title: undefined }
0|myapp_node  | []
0|myapp_node  | GET /get-data?title=findme 304 54.497 ms - -
0|myapp_node  | GET /stylesheets/style.css 304 0.382 ms - -

Ниже приведеновесь отрендеренный HTML от pug для моего файла.Он включает дополнительную информацию, которая может иметь или не иметь отношение к делу:

<!DOCTYPE html>
<html>
    <head>
        <title>Movie Database</title>
        <link rel="stylesheet" href="/stylesheets/style.css">
    </head>
    <body>
        <h1>Movie Database</h1>
        <p>Welcome to Movie Database</p>
        <section class="insert">
            <h3>Insert Data</h3>
            <form action="/insert" method="post">
                <div class="input">
                    <label for="title">Title</label>
                    <input type="text" id="title" name="title">
                </div>
                <div class="input">
                    <label for="content">Content</label>
                    <input type="text" id="content" name="content">
                </div>
                <div class="input">
                    <label for="author">Author</label>
                    <input type="text" id="author" name="author">
                </div>
                <button type="submit">INSERT</button>
            </form>
        </section>
        <section class="get">
            <h3>Get Data By Title</h3>
            <form action="/get-data" method="get">
                <div class="input">
                    <label for="title">Title</label>
                    <input type="text" id="title" name="title">
                </div>
                <button type="submit">LOAD</button>
            </form>
            <div></div>
        </section>
        <section class="update">
            <h3>Update Data</h3>
            <form action="/update" method="post">
                <div class="input">
                    <label for="title">Title</label>
                    <input type="text" id="title" name="title">
                </div>
                <div class="input">
                    <label for="id">ID</label>
                    <input type="text" id="id" name="id">
                </div>
                <div class="input">
                    <label for="content">Content</label>
                    <input type="text" id="content" name="content">
                </div>
                <div class="input">
                    <label for="author">Author</label>
                    <input type="text" id="author" name="author">
                </div>
                <button type="submit">UPDATE</button>
            </form>
        </section>
    </body>
</html>

А вот мой app.js файл:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
// var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
// app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

1 Ответ

0 голосов
/ 20 сентября 2018

Итак, данные, которые вы ищете, находятся в свойстве запроса вашего объекта запроса.Вы знаете, что в журнале вашего сервера вы видите:

GET /get-data?title=findme

Когда вы видите?после пути к объекту запроса поступает запрос.Чтобы получить доступ к этим свойствам, просто нажмите на req.query.title или req.query.you_prop_name_here.

Вот фрагмент из экспресс-документации, чтобы показать вам, как это работает немного больше.

// GET /search?q=tobi+ferret
req.query.q
// => "tobi ferret"

// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
req.query.order
// => "desc"

req.query.shoe.color
// => "blue"

req.query.shoe.type
// => "converse"
...