节点Web服务器回调

时间:2018-11-05 22:39:31

标签: node.js

在服务器中处理回调的最佳方法是什么?我有很多回调,并且文件结构很好,但是正在寻找一种隐藏响应对象以供以后使用的方法。

我了解匿名函数将变量范围保留在函数内部。即,这可以很好地处理多个请求:

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,但那不会很轻松。还是应该使用异步模式。

1 个答案:

答案 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))
}