最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin14浏览0评论

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

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

我试图管理一个连接实例,使用一个函数来处理空闲连接断开问题,使用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访问它。
发布评论

评论列表(0)

  1. 暂无评论