【问题标题】:Select data from database depends on select value option in node and ejs从数据库中选择数据取决于节点和 ejs 中的选择值选项
【发布时间】:2020-08-01 14:49:44
【问题描述】:

我是 node.js 的新手。我使用 Express 和 EJS。我想从选择选项中选择值,并根据这个值从 Postgres 数据库中选择数据并在页面上呈现。我怎样才能做到这一点? 这是我的代码:

EJS 页面

<select name="company" class="form-control" id="companylist" onchange="getselectedvalue();">
          <% for (const comp of model1) { %>
            <option value='<%= comp.ic %>'><%= comp.name %></option>
          <% } %> 
</select>

server.js

app.get("/users/dashboard",checkNotAuthenticated, (req, res) => {
const sql = `select * from company a join accountscompany b on a.id = b.id_company join accounts c on b.id_accounts = c.id WHERE c.id = $1`
pool.query(sql, [req.user.id], (err, com) => {
console.log(req.isAuthenticated());
res.render('dashboard', {user: req.user, content:"header", model1: com.rows});
});
});

所以,例如: 如果我必须在选择选项值中选择值 1234,那么我的查询将是 SELECT * FROM product WHERE company_ic = 1234 并呈现在我的页面上。

感谢您的帮助

【问题讨论】:

    标签: javascript node.js ejs


    【解决方案1】:

    您应该在 app.get 之外创建池。我会建议在它自己的文件中,然后您可以根据需要调用它。 我假设你正在使用 npm 包mysql2
    另外,我假设您的 sql 语法是正确的。您没有提供您的表格作为参考。

    require('dotenv').config();
    const mysql = require('mysql2');
    let pool = mysql.createPool({
        host: "IP_ADDRESS",
        user: "root",
        password: process.env.DBPASSWORD,
        database: "DBNAME",
        waitForConnections: true,
        connectionLimit: 20,
        queueLimit: 0
    });
    const con = pool.promise();
    
    module.exports = con;
    

    然后在 app.get 之前是这样的

    const bodyParser = require('body-parser')
    const con = require('./mysqlPool.js')
    app.use(bodyParser.urlencoded({ extended: true }))
    

    然后在你的函数中,你可以这样做:

    app.get("/users/dashboard",checkNotAuthenticated, async (req, res) => {
        const com = await con.query('SELECT * FROM company a JOIN accountscompany b ON a.id = b.id_company JOIN accounts c ON b.id_accounts = c.id WHERE c.id = ?',[1234])
        .then((result)=>{
            return result[0];
        });
        res.render('dashboard', {user: req.user, content:"header", model1: com});
    });
    
    

    上例中的 1234 是硬编码的;但是,您显然应该在其中放入您的 req.query.[your variable name] 变量。

    【讨论】:

    • 这并不能解决我的问题。我需要在选择选项中选择值,发送到 server.js 并进行新查询,根据下拉列表中的值从数据库中选择数据。
    • 您在将数据发送到您的服务器(从您的 html 表单)时遇到问题吗?
    猜你喜欢
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2012-06-13
    • 1970-01-01
    • 2020-05-14
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多