【问题标题】:How do I get input value from post.ejs如何从 post.ejs 获取输入值
【发布时间】:2021-02-01 13:00:37
【问题描述】:

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)UnhandledPromiseRejectionWarning:TypeError:无法解构“req.body.search”的属性“search”,因为它未定义。 在 C:\BlogMe\app.js:46:13 在 Layer.handle [as handle_request] (C:\BlogMe\node_modules\express\lib\router\layer.js:95:5) 在下一个 (C:\BlogMe\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (C:\BlogMe\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\BlogMe\node_modules\express\lib\router\layer.js:95:5) 在 C:\BlogMe\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\BlogMe\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\BlogMe\node_modules\express\lib\router\index.js:275:10) 在 SessionStrategy.strategy.pass (C:\BlogMe\node_modules\passport\lib\middleware\authenticate.js:343:9) 在 SessionStrategy.authenticate (C:\BlogMe\node_modules\passport\lib\strategies\session.js:75:10) 尝试(C:\BlogMe\node_modules\passport\lib\middleware\authenticate.js:366:16) 在进行身份验证时(C:\BlogMe\node_modules\passport\lib\middleware\authenticate.js:367:7) 在 Layer.handle [as handle_request] (C:\BlogMe\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (C:\BlogMe\node_modules\express\lib\router\index.js:317:13) 在 C:\BlogMe\node_modules\express\lib\router\index.js:284:7 在 Function.process_params (C:\BlogMe\node_modules\express\lib\router\index.js:335:12) (节点:12752)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志 --unhandled-rejections=strict(请参阅 https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。 (拒绝编号:14)

【问题讨论】:

  • 你可以写一个提交处理程序

标签: javascript html node.js


【解决方案1】:

由于您使用 GET 方法提交表单,因此搜索参数将作为查询字符串附加到 url。 Express 允许您通过req.query 访问这些参数。因此,您应该使用 req.params(用于路径/url 参数)而不是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2018-09-17
    • 2018-05-26
    • 2020-06-01
    • 2018-03-01
    • 2019-12-30
    • 1970-01-01
    相关资源
    最近更新 更多