webapi调用nodejs到postgres,多个占位符不起作用

时间:2018-03-02 09:24:00

标签: node.js postgresql

我有两个表recipemaster和ingredientmaster。

recipemaster表

recipe_code |recipe_title |
------------|-------------|
1           |    one      |
2           |    two      |
3           |    three    |
4           |    four     |

成分表

ingredient_code |recipe_code |ingredient_detail |
----------------|------------|------------------|
                |            |                  | 

在前端反应中,我根据选择框中的recipemaster表中选择的recipe_title输入ingredient_detail,我的任务是从recipemaster表中选择recipe_title,并根据recipe_title选择特定的recipe_code并填充该特定的recipe_code在成分表中。当然,ingredient_detail也是一起输入的。 Ingredient_code自动递增,因此无需担心。

我尝试了什么: -

app.post('/api/new-ingre',function(request,response){
    console.log('Ingredients connected to db')
    var recipe_code;
    var recipe_title = request.body.recipe_title;
    var recipe_text = request.body.recipe_text;
    let values = [recipe_title,recipe_text];
    pool.connect((err,db,done)=>{
        if(err){
            return response.status(400).send(err);
        }
        else{
            console.log(request.body.recipe_title)
            console.log(request.body.recipe_text)
            db.query('INSERT INTO public.ingredientmaster(recipe_code,ingredient_detail=?) select recipe_code from recipemaster where recipe_title = ?',[recipe_text,recipe_title],(err,table)=>{
                done();
                if(err){
                    return response.status(400).send(err);
                }
                else{
                    console.log('INGREDIENT DATA INSERTED');
                    response.status(201).send({message:'Ingredient data inserted'});
                }
            })
        }
    })
});

查询在数据库中执行时有效。但是,当这种类型的复杂查询出现时,我不知道如何在nodejs中使用此查询。  感谢帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

好的,我在实施过程中遇到了类似的问题,因为我对postgres没有足够的了解,所以我的建议是:

  1. 我正在使用pg-promise library
  2. 创建一个像这样的连接单例文件(mydb.js)

    'use strict';
    let pgp = require('pg-promise')();
    //let db = pgp(config.postgres);
    module.exports.db = db;
    
  3. 使用以前的文件连接到app.js(或等效的主文件)上的PostgreSQL,如下所示:

    import { db } from './mydb';
    //.... more imports and initialization lines
    //....
    //I use this to validate postgres connection only on app.js
    db.proc('version')
    .then(() => {
      console.log('Postgres Connected.... ');
    })
    .catch(err => {
      console.log('Postgres connection error:');
      console.error(err);
      process.exit(-1);
    });
    
  4. 在您的控制器上使用此代码或类似代码:

    import { db } from './mydb';
    //...more code
    app.post('/api/new-ingre',function(request,response){
       let sqlInsert = `INSERT INTO ......`;
       db.any(sqlInsert, [])
       .then(()=>{
           console.log('INGREDIENT DATA INSERTED');
           response.status(201).send({message:'Ingredient data inserted'});
        })
       .catch((err)=>{
           response.status(400).send(err);
       })
    });