#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;
// ...
}