【发布时间】:2017-07-26 02:21:20
【问题描述】:
我正在尝试在 nodejs 中执行回调函数,使用 expressjs 和 angular 2(我不知道 angular2 部分是否相关)。
我所做的是: 我在 angular2 中有一个公式,我向我的 API 路由发送一个 get 请求,然后我通过 get 将公式中的文本字段发送到 URL,然后我执行 MYSQL 查询以查看电话簿数据库,然后我我希望从电话簿中获得完整的用户及其详细信息。
公式:
<div class="container">
<div class="col-md-4">
<h1>Addressbook</h1>
<form [formGroup]="searchForm" (ngSubmit)="doSearch($event)">
<input formControlName="searchString" type="text" placeholder="Name">
<button type="submit">Search</button>
</form>
</div>
</div>
第一个函数,doSearch:
doSearch(event) {
let formData = this.searchForm.value;
var searchString = this.searchForm.value.searchString;
this.http.get('/phonebook/search/'+searchString, function(req, res){}).subscribe(
function(response) {
console.log("Success Response");
},
function(error) { console.log("Error happened" + error)},
function() { console.log("the subscription is completed")}
);
}
这会调用发送参数的路由,所以并不难。
现在创建路由器进入游戏:
public static create(router: Router, basePath: string) {
console.log("[SearchRoute::create] Creating routes for /search.");
// call the function for retrieving the address book results
router.get(basePath + "/search/:searchString", (req: Request, res: Response, next: NextFunction) => {
console.log("## [SearchRoute] Called GET /search.");
var object = searchUser(req);
console.log(object);
});
}
最后,函数 searchUser 被调用:
function searchUser(req: Request) {
console.log("searchUser Function executed.");
var searchString = req.params.searchString;
var query = p_query('SELECT XXXX')
.then(function (results) {
console.log("query executed and all okay");
return (results);
})
.catch(function (error) {
console.error("Wooopsi", error);
});
console.log("query result: "+query);
}
此外,我在这里发布了我构建的新查询函数,以便能够处理承诺(我不知道它是否是最佳选择):
function p_query(q) {
return new Promise(function (resolve, reject) {
// The Promise constructor should catch any errors thrown on
// this tick. Alternately, try/catch and reject(err) on catch.
myMYSQL.db.query(
q,
function (error, results) {
if (error)
reject(error);
resolve(results);
});
})
};
那么,我真正想做的是什么,我的问题是什么?
我想将查询结果发送回客户端(angular2 公式),但我无法做到...
因此,在这篇非常长的帖子之后,如果您阅读到这里,我真的很感激,对于这个复杂的问题,我深表歉意!
PS:我知道我对自己的解释很糟糕:(
问候, 丹尼尔
【问题讨论】:
-
有必要使用promise吗?
-
在这种情况下可能不是,但是我在另一个函数中遇到了我需要执行一个查询的情况,该查询取决于第一个查询的结果(在第一个查询中,我查找客户端 ID ,并且我在第二个查询中使用该客户端 ID),当我将它们放在同一个代码块中时,有时它们会同时执行并且第二个查询失败(因为首先执行),所以对于这种情况可能不是,但我会真的很喜欢用它
-
你在哪里? res.json(object) 在你的路由器定义中?然后在您的 doSearch 中,您必须处理接收到的数据,例如response.body?
-
您可以使用递归回调将它们全部包装在函数中,一个函数将在得到结果后执行另一个函数?
-
@Myonara 我是 nodejs 的一个完整的菜鸟,如果你能给我一个链接,我可以阅读该对象。
标签: mysql node.js angular express