对象中的访问函数,嵌套在另一个函数中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象中的访问函数,嵌套在另一个函数中相关的知识,希望对你有一定的参考价值。

我试图管理一个连接实例,使用一个函数来处理空闲连接断开问题,使用mysql数据库和node.js

目前,我有以下代码(coffeescript):

mysql = require 'mysql'

handleDisconnect = () ->
  connection = mysql.createConnection
    host: 'localhost'
    user: 'root'
    password: 'passroot'
    database: 'mydb'

  connection.connect (err) ->
    if err
      console.log 'Error connecting to db: ', err
    setTimeout handleDisconnect, 2000

  connection.on 'error', (err) ->
    console.log 'db error', err
    if err.code == 'PROTOCOL_CONNECTION_LOST'
      handleDisconnect()
    else
      throw err

  handleDisconnect.instance = connection

module.exports = handleDisconnect

express = require 'express'
router = express.Router()
connection = require('../database')().instance

bcrypt = require 'bcryptjs'

router.post '/', (req, res) ->
  credential = connection.escape req.body.credential
  password = connection.escape req.body.password
  res.send credential+password

module.exports = router

问题是,当我尝试访问路由时,我收到以下错误:

无法读取未定义的属性'escape'

我究竟做错了什么?

答案

我相信你的问题是handleDisconnect的最后一行正在返回实例,所以你试图从instance获得instance,而不是从handleDisconnect获得。因此,如果要访问其中的属性,则需要该函数在最后返回自身。

您还希望函数使用等效的“this”(coffeescript中的@),而不是特别指的是handleDisconnect

示例代码:

mysql = require 'mysql'

handleDisconnect = () ->
  connection = mysql.createConnection
    host: 'localhost'
    user: 'root'
    password: 'passroot'
    database: 'mydb'

  connection.connect (err) ->
    if err
      console.log 'Error connecting to db: ', err
    setTimeout handleDisconnect, 2000

  connection.on 'error', (err) ->
    console.log 'db error', err
    if err.code == 'PROTOCOL_CONNECTION_LOST'
      handleDisconnect()
    else
      throw err

  @instance = connection
  @

module.exports = handleDisconnect

虽然我个人只是做以下事情,但根本不打扰“实例”:

  1. 在你的函数中使用@connection
  2. 报废@instance = connection
  3. 获得返回自己的功能
  4. 使用require('../database')().connection访问它。

以上是关于对象中的访问函数,嵌套在另一个函数中的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

共享元素转换:活动到嵌套在另一个活动中的片段

Swoole 关于reload重启与回调函数中代码的重载

统计c程序中代码行数以及函数的个数

golang编程实践总结

python中的闭包