node express api报错

这是请求的方法

app.get('/api/:id', function (req, res) {
    connection.connect();
    connection.query('SELECT * from testmodel_url WhERE id='+req.params.id, function(err, rows, fields) {
        if (err) throw err;
        let obj={
            'status':200,
            'message':'success',
            'data':rows
        }
        res.json(obj)
    });
    connection.end();
});

使用postman第一次请求可以获得正确的结果

clipboard.png

再次请求就会报错

clipboard.png

events.js:182
      throw er; // Unhandled 'error' event
      ^

Error: Cannot enqueue Handshake after invoking quit.
    at Protocol._validateEnqueue (C:\bin\pro\express\node_modules\_mysql@2.15.0@
mysql\lib\protocol\Protocol.js:204:16)
    at Protocol._enqueue (C:\bin\pro\express\node_modules\_mysql@2.15.0@mysql\li
b\protocol\Protocol.js:139:13)
    at Protocol.handshake (C:\bin\pro\express\node_modules\_mysql@2.15.0@mysql\l
ib\protocol\Protocol.js:52:23)
    at Connection.connect (C:\bin\pro\express\node_modules\_mysql@2.15.0@mysql\l
ib\Connection.js:130:18)
    at C:\bin\pro\express\index.js:29:16
    at Layer.handle [as handle_request] (C:\bin\pro\express\node_modules\_expres
s@4.16.3@express\lib\router\layer.js:95:5)
    at next (C:\bin\pro\express\node_modules\_express@4.16.3@express\lib\router\
route.js:137:13)
    at Route.dispatch (C:\bin\pro\express\node_modules\_express@4.16.3@express\l
ib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\bin\pro\express\node_modules\_expres
s@4.16.3@express\lib\router\layer.js:95:5)
    at C:\bin\pro\express\node_modules\_express@4.16.3@express\lib\router\index.
js:281:22

这是为什么呢求解答 0.0

阅读 3.2k
3 个回答

你要在每个请求完成之后调用 createConnection 再一次创建一个新的连接实例,就是类似于工厂函数,你得在响应请求函数的第一句再一次调用你创建你的connection的方法,为新请求再创建一个连接实例

从文字上讲connection.query是异步操作,为什么没返回结果就执行connection.end();

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题