这个nodejs / express代码完全正常,但我不喜欢这个想法
在create_new_user
函数中传递响应对象我想要
从create_new_user
函数返回一个值但它不返回
使用res.send
或res.sendStatus
。我做到了这一点,但我不认为这是
正确的方法。你能帮我理解究竟是什么吗?
出错了,最好的办法是什么?
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var async = require('async');
router.post('/', function(req, res, next){
var uname = req.body.user;
var city = req.body.city;
async.series([
function(callback){
create_new_user(uname, city, res);
console.log(' First Function');
callback();
},
function(callback){
console.log(' Second Function');
callback();
}
], function(){
console.log("Execution FInished");
});
});
function create_new_user(username , city, res){
var con = mysql.createConnection({
host:'localhost',
user:'root',
password:'admin',
database:'test'
});
var q = " INSERT INTO user_master VALUES (null, ? , ? ) ";
var field_values = [ username, city];
con.query(q, field_values, function(err, results){
if(err){
throw err;
}
else{
console.log("Last Id : " + results.insertId);
res.send(results.insertId); /* see this */
}
});
con.end();
}
module.exports = router;
答案 0 :(得分:2)
Node以async-io原则运行,因此涉及在某些外部服务(如数据库或Web请求)上读取或写入的任何内容都是异步发生的。因此,异步函数不会返回值,它们通常只返回某种回调函数。
您可以将一些函数作为最后一个参数传递,而不是传递res。然后Create_new_user将调用该函数并将数据库调用的结果传递给它。
或者,这种回调问题的一种流行方法是使用Promises。 Create_new_user将返回在数据库调用完成时得到满足的promise。然后,当履行承诺时,另一个函数将运行。