Node.js 在express.js中完成处理请求

Node.js 在express.js中完成处理请求,node.js,express,Node.js,Express,当我有一个简单的函数来处理请求时,我可以使用res.end并在任何时候返回以结束它,例如发生了一些错误/不正确的数据等 get('/', function (req, res) { if (!req.param('id')) { res.send('Must provide ID!'); res.end(); // <-- response is ready, send it to client return; // <-- r

当我有一个简单的函数来处理请求时,我可以使用res.end并在任何时候返回以结束它,例如发生了一些错误/不正确的数据等

get('/', function (req, res) {
    if (!req.param('id')) {
        res.send('Must provide ID!');
        res.end(); // <-- response is ready, send it to client
        return; // <-- request processing stops here, get() finishes 
    }
    // do other stuff
    res.send('ok'); // <-- this can never overlap with the previous res.send()
});

我认为应该调用客户端res.end来发送响应,但是如何停止进一步的代码处理-即从所有函数返回?

不可能从被调用的函数返回,只需使用如下回调:

function validate(req, res, callback) {
    if (!req.param('id')) {
        res.send('Must provide ID!');
        res.end();
    } else {
        callback();
    }
}

get('/', function (req, res) {
    validate(req, function () {
        res.send('ok');
    });
});

无法从被调用函数返回,只需使用如下回调:

function validate(req, res, callback) {
    if (!req.param('id')) {
        res.send('Must provide ID!');
        res.end();
    } else {
        callback();
    }
}

get('/', function (req, res) {
    validate(req, function () {
        res.send('ok');
    });
});
根据是否已发送响应,您可以在validate函数中返回true或false

但是,它不是节点样式。首选在节点中使用回调。

根据是否已发送响应,您可以在验证函数中返回true或false


但是,它不是节点样式。在node中使用回调是首选。

我知道这是一个老问题,但可能对其他人有帮助。你可以这样用

get('/', function (req, res) {
    validate(req);

    // will only be sent if validate hasn't already sent the error message
    if(!res.headersSent) {
        res.send('ok');
    }
});

function validate(req, res) {
    if (!req.param('id')) {
        res.send('Must provide ID!');
        res.end();
    }
}

我知道这是一个老问题,但可能对其他人有帮助。你可以这样用

get('/', function (req, res) {
    validate(req);

    // will only be sent if validate hasn't already sent the error message
    if(!res.headersSent) {
        res.send('ok');
    }
});

function validate(req, res) {
    if (!req.param('id')) {
        res.send('Must provide ID!');
        res.end();
    }
}

不能从被调用函数返回不能从被调用函数返回