Как мне получить входное значение из post.ejs

#javascript #html #node.js

#javascript #HTML #node.js

Вопрос:

app.js


 var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var passport = require('passport');
var localStrategy = require('passport-local');
var axios = require("axios");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

const KEY = "<key>";

app.use(require('express-session')({
    secret: "this is Blogme session",
    resave: false,
    saveUninitialized: false
}));

app.get("/post", (req, res) => {
    res.render("main/post.ejs")
})

app.get('/result', async function(req, res){
    const { search } = req.params

    const response = await axios.get('https://www.googleapis.com/youtube/v3/search',{
        params:{
            q: { search } ,
            part: "snippet",
            maxResults: 32,
            key: KEY,
        }
    })
    .catch(err => console.log(err))

    res.render("main/eg.ejs", { response: response})
})
app.listen(process.env.PORT || 3000, process.env.IP, function(){
    console.log("server has started");
})
  

например, ejs

 <html>
    <head>
        <title>Youtube Videos</title>
    </head>
    <body>
        <div class="ui secondary pointing menu" style="height: 60px; align-items: center;">
            <a class="active item">
              Home
            </a>
            <a class="item">
              Messages
            </a>
            <a class="item">
              Friends
            </a>
          </div>
        <div class="container">
            <div class="row">
                <% for(i=0;i<response.data.items.length;i  ){ %>
                <div class="col-md-3" style="display: flex; align-items: center; padding: 30px;">
                    <div>
                        <img src="<%= response.data.items[i].snippet.thumbnails.default.url %>" 
                         alt="" style="width: 80%;"/>
                        <button class="btn btn-primary" style="width: 80%; margin-top: 10px;">Watch 
                         Now</button>
                    </div>
                </div>
                <% } %>
            </div>
        </div>
    </body>
</html>
  

post.ejs

 <html>
    <body>
        <form action="/result" method="GET">
            <input type="text" name="search" placeholder="Search videos" />
            <button>Submit</button>
        </form>
    </body>
</html>
  

(узел: 12752) Необработанное promiserejectionwarning: ошибка типа: невозможно уничтожить свойство ‘search’ из ‘req.body.search’, поскольку оно не определено.
в C:BlogMeapp.js:46:13
в Layer.handle [как handle_request] (C:BlogMenode_modulesexpresslibrouterlayer.js:95:5 )
при следующем (C:BlogMenode_modulesexpresslibrouterroute.js:137:13 )
в Route.dispatch (C:BlogMenode_modulesexpresslibrouterroute.js:112:3 )
в Layer.handle [как handle_request] (C:BlogMenode_modulesexpresslibrouterlayer.js:95:5 )
в C:BlogMenode_modulesexpresslibrouterindex.js:281:22
в функции.process_params (C:BlogMenode_modulesexpresslibrouterindex.js:335:12 )
при следующем (C:BlogMenode_modulesexpresslibrouterindex.js:275:10 )
в SessionStrategy.strategy.передать (C:BlogMenode_modulespassportlibmiddlewareauthenticate.js:343:9 )
в SessionStrategy.authenticate (C:BlogMenode_modulespassportlibstrategiessession.js:75:10 )
при попытке (C:BlogMenode_modulespassportlibmiddlewareauthenticate.js:366:16 )
при аутентификации (C:BlogMenode_modulespassportlibmiddlewareauthenticate.js:367:7 )
в Layer.handle [как handle_request] (C:BlogMenode_modulesexpresslibrouterlayer.js:95:5 )
в trim_prefix (C:BlogMenode_modulesexpresslibrouterindex.js:317:13 )
в C:BlogMenode_modulesexpresslibrouterindex.js:284:7
в функции.process_params (C:BlogMenode_modulesexpresslibrouterindex.js:335:12 )
(узел: 12752) Предупреждение о необработанном отказе: отклонение необработанного обещания. Эта ошибка возникла либо из-за ввода внутри асинхронной функции без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch() . Чтобы завершить процесс узла при отклонении необработанного обещания, используйте флаг CLI --unhandled-rejections=strict (см. https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode ). (идентификатор отклонения: 14)

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

1. вы можете написать обработчик отправки

Ответ №1:

Поскольку вы отправляете форму с помощью метода GET , параметр поиска будет добавлен к URL-адресу в виде строки запроса. Экспресс позволяет получить доступ к этим параметрам через req.query . Поэтому вместо req.params (который вы бы использовали для параметров пути / url), вы должны использовать:

 app.get('/result', async function(req, res){
    const { search } = req.query;
    // ...
}