获取响应对象到浏览器

时间:2017-10-25 18:45:02

标签: javascript node.js express

嗨我在NODEJS中的router.js中有一个函数:

const authenticateUser = (req, res, next) => {
  //something
};

当我的应用程序运行时,会调用此函数。我需要检查响应对象。有没有办法可以将我的响应对象打印到客户端,即浏览器或以适当的JSON格式打印,显示内部对象。

2 个答案:

答案 0 :(得分:1)

使用res.send(your_object)。它会将响应发送到浏览器。

答案 1 :(得分:0)

我认为一种将服务器消息记录到用户浏览器控制台的方法可能是打印script标记,而在<script>中,您必须console.log(或console.error )您的服务器消息

const authenticateUser = (req, res, next) => {
  // ...
  res.write(`<script>console.log('server log:', ${JSON.stringify(your_object)})</script>`)
  // ...
  // res.end();
};

当然,您可以将日志记录部分包含在一个函数或template literal中,或者甚至可以将其包含在具有模板文字方法的类中

// any-file.mjs

// log messages to the browser console
class BrowserLogger {
    constructor({method = "log", ...tail}) {
        Object.assign(this, {method, ...tail})
    }

    // template literal
    print(strings, ...args) {
        // joins arguments
        var all = strings.flatMap( (s, i) => [s, args[i]])
        // print on the browser console
        return `<script>console.${this.method}(${
            all.map(this.handler.bind(this))
        })</script>`
    }

    handler(current){
        return JSON.stringify(current)
    }
}

// crete a few instances of the BrowserLogger class
// one for generic messages
const logger = new BrowserLogger({})
// one for errors
const errorLogger = new BrowserLogger({
    method: "error",
    // custom handler for errors :)
    handler(e){
        return this.constructor.prototype.handler(e instanceof Error ? e.stack : e)
    }
})

var obj = {foo:"bar"}

const authenticateUser = (req, res, next) => {

    // ...

    // generic messages
    res.write(logger.print `obj:${obj}, msg:${{ foobar: true }}`)
    // error
    res.write(errorLogger.print `${
        new Error("error message from the server!")
    }`)

    // ...

    res.end();
};

// use authenticateUser in a server
import http from "http"
var port = 8080
var server = http.createServer(authenticateUser)
server.listen(port);