在服务器中处理回调的最佳方法是什么?我有很多回调,并且文件结构很好,但是正在寻找一种隐藏响应对象以供以后使用的方法。
我了解匿名函数将变量范围保留在函数内部。即,这可以很好地处理多个请求:
const http = require('http')
const _xmlToJson = new require("xml2js").Parser({explicitArray: false})
http.createServer(function (request, response) {
var xml = `<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>You</to>
<from>Me</from>
<heading>Reminder</heading>
<body>Get Some Milk</body>
</note>`
_xmlToJson.parseString(xml, function(error, json){
response.writeHead(200, {'Content-Type': 'application/json'});
response.end(JSON.stringify(json))
})
}).listen(process.env.PORT);
在单请求应用程序中,我经常存储回调,但是对于多个请求,全局_state会被覆盖。我想使用如下功能,但我假设这种模式不适用于Web服务器代码。
const http = require('http')
const _xmlToJson = new require("xml2js").Parser({explicitArray: false})
var _state
http.createServer(function (request, response) {
_state = {
httpResponse: response
}
var xml = `<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>You</to>
<from>Me</from>
<heading>Reminder</heading>
<body>Get Some Milk</body>
</note>`
_xmlToJson.parseString(xml, xmlToJsonComplete)
}).listen(process.env.PORT);
function xmlToJsonComplete(error, json){
_state.httpResponse.writeHead(200, {'Content-Type': 'application/json'});
_state.httpResponse.end(JSON.stringify(json))
}
我只是想知道对此有什么解决方案。我考虑过要使用Session,但那不会很轻松。还是应该使用异步模式。
答案 0 :(得分:0)
哦,是的,现在看来确实很明显。谢谢@凯文·B。
const http = require('http')
const _xmlToJson = new require("xml2js").Parser({explicitArray: false})
var _state
http.createServer(function (request, response) {
_state = {
httpResponse: response
}
var xml = `<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>You</to>
<from>Me</from>
<heading>Reminder</heading>
<body>Get Some Milk</body>
</note>`
_xmlToJson.parseString(xml, function(error, json){
xmlToJsonComplete(json, response)
})
}).listen(process.env.PORT);
function xmlToJsonComplete(json, response){
response.writeHead(200, {'Content-Type': 'application/json'});
response.end(JSON.stringify(json))
}