【问题标题】:REST API with node.js CRUD with Postgres DatabaseREST API 与 node.js CRUD 与 Postgres 数据库
【发布时间】:2015-08-06 22:40:01
【问题描述】:

我是 node.js 和 javascript 的新手,除了 CRUD 操作。 我想使用带有 postgresql 数据库的 node.js 创建一个 rest api,以便 PUT POST UPDATE DELETE 方法通过 JSON 工作。抱歉,如果我的问题不清楚,但这是我所拥有的,而我无法完成的。

apiRoutes.get('/db/:id', function(request, response){
  pg.connect(process.env.DATABASE_URL, function(err, client, done) {        
    client.query('SELECT * FROM test2 WHERE $1 = test2.id;', [request.params.id], function(err, result) {
        done();
         if (err){ 
            console.error(err); response.json({success:"false", message: err}); 
         }
         else{ 
            response.json({success: "true", data: result.rows} ); 
         }
    });
  });
});

这是通过PUT方法更新数据库数据的代码。

 apiRoutes.put('/db/:id', function(request, response){
   var data1 = {name: request.body.name};   
    client.query('UPDATE test2 SET name=($1) WHERE id=($2)', [data1.name], [request.params.id]);
       pg.connect(process.env.DATABASE_URL, function(err, client, done) {
        client.query('SELECT * FROM test2 WHERE $1 = test2.id', [request.params.id], function(err, result) {

        done();
         if (err){ 
            console.error(err); response.json({success:"false", message: err}); 
         }
         else{  

            response.json({success:"true", data: result.rows} ); 
         }
    });
  });
});

当我在 Postman 中单击 PUT 时,首先它会显示数据,包括名称,但它会从数据库中删除,然后即使我单击 raw 然后编辑数据,然后发送它,它也不会保存它,它会返回 null ,名称=空。 抱歉,如果我不清楚,但如果有人稍微了解我,一点帮助会很棒,这对我来说很重要,完成这个。谢谢。

【问题讨论】:

    标签: javascript node.js postgresql rest crud


    【解决方案1】:

    您的代码中有两个问题:

    1. 您调用done(),在调用更新查询之前断开与数据库的连接,然后在断开与数据库的连接时调用client.query

    2. 修改第一个后,要修改第二个,更新,以function(err, result)作为最后一个参数,根据结果响应。如果异步调用是同步调用,则不能像在那儿那样对待它。并且一旦完成,就可以拨打done()

    如果您想简化数据库使用,请查看pg-promise

    【讨论】:

    • 第一点我非常理解。谢谢你。但第二点我不完全理解。你能解释一下你的意思吗,因为我对此很陌生,并不完全理解它,我需要完成这件事。非常感谢。
    • 当你打电话给你最后一个client.query时,你应该等待结果,而你没有。当您调用response.json 时,您将使用第一个查询的结果,而将第二个查询留在边缘。
    • 非常感谢@Vitaly-t 的帮助。但我真的不明白等待结果意味着什么。我将编辑我的第二个 put 方法,请您复制它并将代码放在它所属的位置,因为我尝试了很多东西,做了很多搜索但没有结果。谢谢。
    • 您已经以一种现在完全没有意义的方式更改了您的代码。您甚至在连接到数据库之前就调用了更新查询。如果您提供了您想要实现的逻辑,也许我可以对您的代码进行有效的更改。
    【解决方案2】:

    我想要实现的是,如果我在 Postman throw json 的正文中输入数据,数据库将使用该数据进行更新,它将显示数据库中的新数据以及数据库中已有的数据。 这是我解决的代码:

    apiRoutes.put('/db', function(request, response){ 
    pg.connect(process.env.DATABASE_URL, function(err, client, done) {
    
        var data1 = {id: request.body.id, name: request.body.name, lastname: request.body.lastname, address: request.body.address, phonenumber: request.body.phonenumber, email: request.body.email};   
            //Update data in the database
        client.query("UPDATE Contact SET name = $1, lastname = $2, address = $3, phonenumber = $4, email = $5 WHERE id = $6", [data1.name, data1.lastname, data1.address, data1.phonenumber, data1.email, data1.id]);
            //Display after updated
        client.query('SELECT * FROM Contact;', function(err, result) {
            done();
             if (err){ 
                console.error(err); response.json({success:"false", message: err}); 
             }
             else{
                response.json({success:"Data updated successfuly in the database.", data: result.rows} ); 
             }
        });
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2016-12-20
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多