对象中的访问函数,嵌套在另一个函数中
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
虽然我个人只是做以下事情,但根本不打扰“实例”:
- 在你的函数中使用
@connection
- 报废
@instance = connection
- 获得返回自己的功能
- 使用
require('../database')().connection
访问它。
以上是关于对象中的访问函数,嵌套在另一个函数中的主要内容,如果未能解决你的问题,请参考以下文章