【问题标题】:Randomly Querying a Postgresql table with Node/Express and working with the row data使用 Node/Express 随机查询 Postgresql 表并处理行数据
【发布时间】:2016-05-08 16:05:02
【问题描述】:

我有一个包含 46 个条目的表,我需要随机选择一个,然后使用来自该查询的数据并将其传递给我的车把文件。我不确定如何随机查询数据库,也不确定如何实际返回行数据以供我在把手文件中使用。

index.js

var express = require('express');
var router = express.Router();
var pg = require('pg').native;
var score = 0;
/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { 
    title: 'Quiz Game', 
    });
});

//Make a random query here and return it in res.render
router.post('/', function(req,res) {
  pg.connect(process.env.DATABASE_URL + "?ssl=true", function(err, client, done) {
    client.query('SELECT * FROM characters', function(err,result) {
      done();
      if(err) {
        next(err);
      }
      else {
        console.log(result);
        res.render('game', {
          result,
          diff: req.body.difficulty,
          title: 'Hiragana Quiz',
          currScore: score
        });//response.render
      }
    });//client.query
  });//pg.connect
});

router.get('/game', function(req, res) {
    console.log("Got URL");
    res.render('game',
        {
      title: 'Hiragana Quiz',
      diff: 'normal',
      currScore: score,
      name: 'Go select a difficulty',
      img: 'http://i.imgur.com/rvUlv4A.jpg'
});
});



module.exports = router;

当我将查询结果记录到控制台时,我确实获得了数据,但我不确定如何在我的车把文件中使用它。我把它作为结果放在 res.render 中,因为我的教授在其中一个示例中就是这样做的,但我不知道如何正确访问结果。

{ command: 'SELECT',
  rowCount: 1,
  rows: 
   [ { id: 1,
       name: 'ka',
       img: 'https://upload.wikimedia.org/wikipedia/commons/2/25/Japanese_Hiragana_kyokashotai_small_KA.png' } ],
  fields: 
   [ { name: 'id', dataTypeID: 23 },
     { name: 'name', dataTypeID: 25 },
     { name: 'img', dataTypeID: 25 } ] }

game.hbs - 再次跟随我的教授,我放置了 {{#each rows}} 标签和 {{/each}} 来封装从 index.js 中返回的数据,但无论出于何种原因,两者之间的代码{{each}} 标签根本不显示。

<script src="/jquery-2.2.3.js"></script>
<script>
console.log("Loaded script");

$(document).ready(function() {
    //Verify user inputs on client side first
    $("#romaji").change(function() {
        console.log("Something changed!");
        if(!isValid()) {
            $("#error").html("Fix inputs!");
        }
        else
        {
            $("#error").html("");
        }
    });
});

//If input contains anything but lowercase characters, error
function isValid() {
    console.log("isValid() called!");
    var rj = $("#romaji").val().search(/^[a-z]{1,3}$/);
    return (rj != -1);
}
</script>

<!--Title-->
<div align="center">
    <h1>{{title}}</h1>
</div>

<!--Display Current Score, Difficulty, and current picture-->
<div align="center">
    <h2> Score: {{currScore}}/46 </h2>
    <h2> Difficulty: {{diff}} </h2>
    {{#each rows}}
    <h3> Char: {{name}} </h3>
    <img src="{{img}}">
    {{/each}}
</div>

<!--Form to submit answers-->
<div align="center">
    <form>
        <input type="text" name="input" id="romaji">
        <input type="submit" value="submit" id="userInput">
    </form>
    <p id="error"> </p>
</div>

有没有办法随机查询数据库,然后从查询中返回数据以供我的车把文件使用?

【问题讨论】:

    标签: javascript node.js postgresql express handlebars.js


    【解决方案1】:

    有没有办法随机查询数据库

    我假设您运行的是最近的 pgsql 服务器,

    SELECT column FROM table ORDER BY RANDOM() LIMIT 20
    

    http://www.postgresql.org/docs/8.2/static/functions-math.html

    【讨论】:

    • 由于某种原因返回此错误{ [错误:错误:“列”处或附近的语法错误第 1 行:从表中选择列 ORDER BY RANDOM() LIMIT 20 ^] 严重性:“错误” ,sqlState:'42601',messagePrimary:'“列”或附近的语法错误',statementPosition:'8',sourceFile:'scan.l',sourceLine:'1081',sourceFunction:'scanner_yyerror'}
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多