NodeJS& Express - 正确的编写此代码的方法

时间:2015-06-07 02:44:38

标签: node.js express

这个nodejs / express代码完全正常,但我不喜欢这个想法  在create_new_user函数中传递响应对象我想要  从create_new_user函数返回一个值但它不返回  使用res.sendres.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;

1 个答案:

答案 0 :(得分:2)

Node以async-io原则运行,因此涉及在某些外部服务(如数据库或Web请求)上读取或写入的任何内容都是异步发生的。因此,异步函数不会返回值,它们通常只返回某种回调函数。

您可以将一些函数作为最后一个参数传递,而不是传递res。然后Create_new_user将调用该函数并将数据库调用的结果传递给它。

或者,这种回调问题的一种流行方法是使用Promises。 Create_new_user将返回在数据库调用完成时得到满足的promise。然后,当履行承诺时,另一个函数将运行。