Node Express编写API函数样式/设计模式的最佳实践

时间:2018-06-14 14:39:34

标签: javascript node.js design-patterns

我使用MEAN堆栈,我正在编写一些REST API函数来处理带路由功能的数据......

我只是遇到一个问题,我对REST Api和MEAN堆栈以及Javascript都很新... 所以我想知道,有很多不同风格的编写这些javascript函数,例如获取一些数据(甚至如何进行数据操作,例如通过mongoose / mongoDB驱动程序api函数,如aggregate / find,或使用javascript手动选择或过滤数据)。 只是为了展示一些例子:

exports.getTestbyIDRange = function(req, res) {
    Test.aggregate([{"$match": {"$and": [{ "_id": {"$gte": +req.params.start, "$lte": +req.params.end}}]}}])
    //Test.find({"_id": {"$gte": Number(req.params.start), "$lte": Number(req.params.end)}})
    .exec(function(err, demo) {
        console.log("Anzahl gefundener Dokumente: ", demo.length)
        res.json(demo)
        for (let elem of demo) {
            console.log("ID: ", elem["_id"])    
        }   }   )   }

这里,在查询后我使用.exec(函数......,但我也看过..,function(err, Test) {...}或then子句:

 }).then( doc => {
  // do something with matched document
}).catch(e => { console.err(e); res.send(e); })

所以我很困惑,是否有一种“最佳实践”风格的方法/设计模式来编写这些功能?或者所有这些风格都相同?哪个在错误处理方面最好?或者在出现错误/错误处理的情况下,如果出现一些小错误,最好继续使用您的应用程序?我不希望我的后端卡住或挂断......是否有一些好的文献可以在网上找到关于风格的文章?

第二个问题:在编写查询或数据聚合操作时,我应该使用像find和aggregate这样的mongodb操作吗,或者我也可以使用普通的javascript代码吗? (我发现有时候更容易因为我对MongoDB很新) 这里的事情是我的后端函数都在我的MongoDB所在的同一服务器上运行,所以它基本上是localhost,这意味着从服务器检索完整文档然后在其上执行javascript代码时,性能不应太差,否则如果是网络,那么我首先应该使用db驱动程序进行数据库操作是可以理解的......

1 个答案:

答案 0 :(得分:0)

我身边的一些提示

1.尝试将大代码分解为较小的函数,例如从db获取数据的函数以及处理数据的其他函数

  1. 创建查询数据库的常用功能

  2. 函数中应该只有一个res.send或res.json等,下面的代码不应该低于代码

  3. 使用promises来避免回调地狱加上它还可以帮助你编写一个好的可维护代码,并且还有助于更好地处理错误
  4. 为了生成结构,您可以使用swagger创建项目,它将为您提供一个不错的项目结构
  5. 例如,在执行api时,使用带有第一个参数的一个中间件作为导致非常规错误的错误

    app.use((err, req, res, next) => {
       console.log('-----Something broke!---', err)
       res.status(500).send('Something broke!')
      })
    
  6. 在索引文件中使用process.on来处理错误 例如

    process.on('unhandledRejection', (reason, p) =>{console.log('Unhandled Rejection at:', p, 'reason:', reason)})
    process.on('uncaughtException', err => {console.log('-----uncaughtException----- ', err)})