nodejs如何做多个请求

时间:2018-08-24 08:19:53

标签: node.js mongodb express

我需要知道如何编写我的请求以进行多次删除。 第二件事是如何在代码上放置异步功能。 我想删除一个校园,同时在JSON中删除具有相同ID校园的建筑物

app.delete('/campuses/:id', (req, res)=> {
    const id = req.params.id;
    const details = { 'campusid': new ObjectID(id) };  
    db.db('').collection('buildings').remove(details, (err, result)=> { 
        if (err) {
            res.send({ 'error': 'en error has occured' });
        } else {
            res.send(result);
        }
    });
    const details2 = { '_id': new ObjectID(id) };
    db.db('').collection('campuses').remove(details2, (err, result)=> { 
        if (err) {
            res.send({ 'error': 'en error has occured' });
        } else {
            res.send(result);
        }
    }
    );
})

4 个答案:

答案 0 :(得分:0)

您可以在第一个调用第二个函数时执行顺序函数。然后,您可以将变量传递给秒功能(即您的校园ID)。

它可能看起来像这样:

    const Query1 = (res, query) => {
        const request = new sql.Request();
        request.query(query, (err, result) => {
            if (err) {
                return res.json({
                    success: false,
                    message: 'error'
                });
            } else if (result.recordset[0]) {

                let campusID = result.recordset;

                Query2(res, campusID, query = 'SELECT bla bla')

            }
        })
    }

    const Query2 = (res, campusID, query) => {
        const request = new sql.Request();
        request.query(query, (err, result) => {
            if (err) {
                return res.json({
                    success: false,
                    message: 'error'
                });
            } else {

                return res.json({
                    success: true
                });
            }
        })
    }

答案 1 :(得分:0)

有多种方法可以进行异步调用。

  1. 您可以使用诺言。
  2. 异步功能。
  3. 发送响应而无需等待其他任务。
  4. 如果要进行并行调用,可以使用bluebird join函数

答案 2 :(得分:0)

您可以像这样删除。

app.delete('/campuses/:id', async (req, res)=> {
 try {
    const id = req.params.id;
    const details = { 'campusid': new ObjectID(id) };  
    await db.db('').collection('buildings').remove(details);
    const details2 = { '_id': new ObjectID(id) };
    await db.db('').collection('campuses').remove();
    res.send(result);
  } catch(err) {
   return res.json({
                success: false,
                message: 'error'
            });
  }
})

答案 3 :(得分:0)

我比aprom更好地喜欢异步函数的语法,但是我会根据情况使用两者。

这是在移至下一个功能之前按顺序运行功能的示例:

async.waterfall([
    function(callback1) {
        //Do some work, then callback
        if (error) {
            callback1(errorGoesHere,null);
        } else {
            callback1(null,successMessageGoesHere);
        }

    }, 
    function(callback2) {
        //Do some work, then callback
        if (error) {
            callback2(errorGoesHere,null);
        } else {
            callback2(null,successMessageGoesHere);
        }
    }
], function (error, success) {
    if (error) { 
        //show an error 
    }
    //all good return the response, etc.
});

如果这些函数中的任何操作失败,它将自动调用end函数以捕获错误。