我有两个表recipemaster和ingredientmaster。
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中使用此查询。 感谢帮助。谢谢。
答案 0 :(得分:0)
好的,我在实施过程中遇到了类似的问题,因为我对postgres没有足够的了解,所以我的建议是:
创建一个像这样的连接单例文件(mydb.js)
'use strict';
let pgp = require('pg-promise')();
//let db = pgp(config.postgres);
module.exports.db = db;
使用以前的文件连接到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);
});
在您的控制器上使用此代码或类似代码:
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);
})
});