【发布时间】:2018-03-09 13:23:34
【问题描述】:
我在下面发布了我的节点 Web 应用程序的近似值。我最初遇到的问题是,我希望能够在发帖到createentity 时让客户知道插入是否成功以及插入实体的 id。但是,connection.query 有一个回调而不是同步运行,我不能使用 entityservice 在另一种语言中的期望,即简单地同步返回结果。有几种解决方案,我很好奇哪一个是 node.js 的最佳/常见做法,或者是否还有其他我没有想到的。
- 将资源传递给服务,并在回调中响应;似乎不好的做法
- 类似地,将在成功/失败后执行的函数传递给服务;似乎也很糟糕
- 从服务返回承诺并根据解决方案/失败设置资源;似乎服务不应该返回承诺,但我是节点的新手
- 使用我不知道的 node.js 的适当功能的一些更好的方法
- 尝试更改服务以使其同步运行并仅返回结果 其他问题/答案让我怀疑这是可能的还是明智的
- 以其他方式构建应用程序
- 还有别的吗?
//app.js
var express = require('express');
var bodyParser = require('body-parser')
var path = require('path');
var EntityService = require('./entityService.js');
var app = express();
var urlencodedParser = bodyParser.urlencoded({ extended: true })
app.post('/createentity', urlencodedParser, function(req, res){
EntityService.createEntity(req.body.name);
res.status(200).json(null);
});
app.listen(3000);
//entityService.js
var mysql = require('mysql');
EntityService = function(){
var connection = mysql.createConnection({
host : CONNECTION_IP,
user : 'root',
password : 'password',
database : 'entitydb'
});
connection.connect();
this.createEntity = function(name){
var record = {name: 'name'};
var query = connection.query('INSERT INTO entity set ?', record, function(error, results, fields ){
//want to return the results.insertId from the service
});
}
}
module.exports = new EntityService();
【问题讨论】:
-
EntityService()应该返回一个承诺(在异步工作完成时解决)或将回调作为参数(在异步工作完成时调用),然后调用EntityService 可以使用它来了解工作何时完成以及何时发送响应。
标签: node.js promise node-mysql