我编写了一个使用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.send用setHeader()还是writeHeader()我得到这个错误:
response.write
response.send
setHeader()
writeHeader()
http.js:691 抛出新的错误(“发送头后无法设置头。”); ^ 错误:发送标头后无法设置。
还有另一件事。随着response.send()我在屏幕上获得完整的HTML输出,如:
response.send()
<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"
但是有了response.write我,我没有在屏幕上看到html,而只有文本"bla bla bla"。
"bla bla bla"
如果有人可以向我解释这些差异,那就太好了。
我response.send()在docs中找不到,但是我假设.send()将填写并发送响应,因此只能调用一次,而.write()只会编写响应,但是您必须使用发送response.end()
.send()
.write()
response.end()
这意味着您可以使用来编辑标题,.write()因为尚未发送响应。
编辑 :
response.send()是Restify Response API包装器的一部分