use*_*959 54 javascript node.js restify
我编写了一个使用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;
Run Code Online (Sandbox Code Playgroud)
现在我需要知道Node.js response.write和之间的区别response.send.因为response.write我可以设置标题并在其中写入,但在使用时不能对标题执行任何操作response.send.当我用response.send用setHeader()还是writeHeader()我得到这个错误:
http.js:691
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
还有另外一件事.随着response.send()我在屏幕上获得完整的HTML输出,如:
<!DOCTYPE html>\n<html>\n\t<head></head></html> ..... "bla bla bla"
Run Code Online (Sandbox Code Playgroud)
但是response.write我没有屏幕上的html,只有文字"bla bla bla".
如果有人能解释我的差异会很棒.
Fly*_*her 63
response.send(msg) 等于 response.write(msg);response.end();
这意味着,send只能被召唤一次,write可以多次召唤,但你必须end自己打电话.
Jim*_*ies 36
我response.send()在文档中找不到,但我假设.send()会填写并发送响应,所以只能调用一次,而.write()只会写响应,但你必须使用response.end()
这意味着您可以使用编辑标题,.write()因为尚未发送响应.
编辑:
response.send()是restify Response API包装器的一部分
Gän*_*ian 29
res.send()是的一部分Express.js,而不是纯粹的Node.js.
只是一个侧面观察.我的应用程序有时会发回一个非常大的Json对象(包含超过100k点的HighChart对象).随着res.send()有时挂起,呛了服务器,而res.write()并res.end()处理它就好了.
res.send()调用时我也注意到内存峰值.
| 归档时间: |
|
| 查看次数: |
92775 次 |
| 最近记录: |