一尘不染

Node js中response.send和response.write之间的区别

node.js

我编写了一个使用Node js“ restify”框架的小型API。该API接收请求(实际上是“
/”之后的任何内容),然后将该请求发送到另一台服务器。从服务器获取响应,并将响应传递回原始请求源。对于此API,我同时使用了Restify服务器和客户端。

以下是该API代码,可让您更好地理解。

var apiServer = require('apiServer');
apiServer.start();

var restify = require('restify');
var assert = require('assert');

function onRequest(request, response, next)
{
    var client = restify.createStringClient({ 
        url: 'http://example.com'
    });

    client.get('/' + request.params[0], function(err, req, res, data) {
        assert.ifError(err);

        response.setHeader('Content-Type', 'text/html');
        response.writeHead(res.statusCode);
        response.write(data);
        response.end();
    });
    next();
}

function start()
{
    var server = restify.createServer();
    server.get(/^\/(.*)/, onRequest);
    server.listen(8888);

    console.log("Server has started.");
}

exports.start = start;

现在,我需要了解Node.js
response.write和之间的区别response.send。因为response.write我可以设置标题并在其中写入内容,但是使用时无法对标题进行任何操作response.send。当我用response.sendsetHeader()还是writeHeader()我得到这个错误:

http.js:691
    抛出新的错误(“发送头后无法设置头。”);
          ^
    错误:发送标头后无法设置。

还有另一件事。随着response.send()我在屏幕上获得完整的HTML输出,如:

<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"

但是有了response.write我,我没有在屏幕上看到html,而只有文本"bla bla bla"

如果有人可以向我解释这些差异,那就太好了。


阅读 685

收藏
2020-07-07

共1个答案

一尘不染

response.send()docs中找不到,但是我假设.send()将填写并发送响应,因此只能调用一次,而.write()只会编写响应,但是您必须使用发送response.end()

这意味着您可以使用来编辑标题,.write()因为尚未发送响应。

编辑

response.send()Restify Response API包装器的一部分

2020-07-07