如何在Node.js API中返回异步逻辑响应

时间:2018-12-10 09:03:28

标签: javascript node.js api asynchronous

我正在使用Node.js开发第一个托管在Google Cloud上的应用程序。到目前为止,按照Google github上的示例,我已经有了一个简单的REST API,效果很好。

以下是必不可少的部分:

Server.js:

const express = require('express');
const Knex = require('knex');
const goals=require('./api/todos.js')

const app = express();
app.enable('trust proxy');
const knex = connect();
todos.init(knex)

function connect () { <!-- seting up a connection --> }

app.get('/api/get_goals', (req, res)=> {
    goals.get().then((result) => {
        res
        .status(200)
        .set('Content-Type', 'application/json')
        .json(result)
        .end();
    })
})

app.post('/api/insert_todo', (req, res) => {
    todos.insert(req.body.Code, req.body.Title).then(()=> {
       res.status(200)
       .set('Content-Type', 'text/plain')
       .end('ok')
       })
})

api / todos.js

var knex

(function() {

    function init(knexObject) {
        knex=knexObject
    }

    function get_all() {
        return  knex.select('Id', 'Code','Title')
                    .from('Todos')
                    .orderBy('Id', 'desc')
    }

    function insert(code,title) {
        return knex('Todos')
                .insert({
                    Code: code,
                    Title: title
                 })
    }

    module.exports.init=init
    module.exports.list_all=list_all
    module.exports.insert=insert
})();

我想做的是在控制器层中插入一些逻辑,例如:

function insert(code,title) {
    var messages=[]

    if(code=='') {
         messages.push('Code can\'t be ampty')
    }

    if(title=='') {
         messages.push('Title can\'t be empty')
    }

    return knex('Todos')
                .insert({
                    Code: code,
                    Title: title
                  })
}

问题是ORM返回异步功能,并且服务器期望扩展名为.then()的结果。我想要一个代码,它将保持简单,易于传播,并允许我灵活地响应控制器。

什么是处理此问题的合适方法?

另一个问题:是否正在创建一个knex对象并将其传递给所有控制器良好做法?

0 个答案:

没有答案