我正在使用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对象并将其传递给所有控制器良好做法?