在 DB 连接后表示不工作

我试着把 DB 和 Node.j连接起来 如果我从控制台发射剧本 , 一切都很好。 但是从浏览器访问 , 当连接时 , 响应停止

从控制台上 , 我进入了内部竞赛 ! 接好了 !

从浏览器中 , 我得到了 Hello World! 里面休息

由于在控制台版本中的"监听."消息是在"连接"之前,我想在浏览器版本中,系统可能会在连接到DB之前重新连接。 因此 , 我把它从应用程序的末尾移到了。 但这不是原因 , 因为我仍然不能得到"连接的里斯!" - 信息。

var http = require('http');
const express = require('express');
const app = express();
const port = 3000;
var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "login",
  password: "psw",
  database: "db"
});

function restest(req, res) {
    res.write("inside restest");

    con.connect(function(err) {
        if (err) throw err;
        res.write("Connected Res!");
        res.end();
    });
}

function contest() {
    console.log("inside contest");

    con.connect(function(err) {
        if (err) throw err;
        console.log("Connected Con!");
    });
}

contest();

app.get('/nodejs/', function(req, res) { 
    res.write('Hello World!');
    restest(req,res);
    res.send("this should not print out");
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

没有错误消息 , 它只是在写"内部恢复"之后停止响应


EN From: express res not working after DB connection

5 Comments

  1. 当你点击 restest 时, 连接可能已经存在。 错误是从 restest 内部发生的吗?
  2. 我相信你在混淆一些同步 / 异步概念。

    尝试这样的方法也许会有帮助 :

    function restest(req, res, next) {
        res.write('inside restest');
    
        con.connect(function(err) {
            if (err) throw err;
            res.write('Connected Res!');
            next();
        });
    }
    
    function contest(req, res, next) {
        console.log('inside contest');
    
        con.connect(function(err) {
            if (err) throw err;
            console.log('Connected Con!');
            next();
        });
    }
    
    app.get('/nodejs/', [contest, restest],function(req, res) { 
        res.write('Hello World!');
        restest(req,res);
    });
    
    1. 在清除了第二个连接调用 ( 见原始问题的注释 ) 中的错误并得出了同样的结果之后 , 我尝试了这样的方法 , 得到了连接的 Res ! 但是自从寻找了一种在问候世界之后调用 restest 的方法以来 , 仍然是一个问题 ( 似乎在休息后停止 ) 。 但是你是对的 , 因为问题是关于 sunc / async 的概念 , 正如 @Bhaskar 所说。 当我用这个示例代码的方式做的时候 , 它就开始工作了
  3. 在进一步测试时 , 我注意到了同样的情况 : 当进入 restest 时 , 连接已经存在 ( 实际上 , 改变了投掷错误 ->结果。 于是我用电话把比赛的结果说出来 , 但得到了原来的结果。 ( 这次没有错 ) 。
  4. 因此 , 这里发生的是 : 一旦调用 /nodejs api , 它将编写 Hello World! 文本 , 然后它将写入 restest 函数 , 它将写入 inside restest , 然后它将开始异步地连接到 DB , 因为 DB connect 是一个异步函数 , 它将返回 restest 函数 , 它将以 res.send("this should not print out"); 发送响应。 因此, 在此之后 resDB connect 函数中不再是可访问的。

More articles:

  • 客户端和服务器端之间的连接 , 不能在 Sock.IO 上工作
  • 如何处理节点 acl 中的猫鼬连接延迟
  • 如何使用 Express 将 Node.js 与 MySQL 8.0 连接起来 ?
  • 静态 ( _ dirname +"/public")不工作
  • 无法连接套接字的节点
  • 表示: 是否有必要以 200 身份作出回应?
  • 使用 Backbone.js 框架如何使 ajax 调用来表示路径
  • 在 Node JS 中连接 mysql 和进程变量
  • jquery mobile datasrel ="back"不在对话框中工作
  • 表示 js 总变量查询?
  • 在快递 (通过连接) 处理文本 / 平原?
  • Nodejs - 带有 v宿主的动态表示子域
  • 在 Node.js 中连接时出错
  • 角 6PWA , 节点不工作
  • 节点 http: // 表示监听差异
  • 快速 JS 命令不工作
  • mongodb+nodejs 不能与本地主机连接
  • - FIXEDD 无法获得 / 表示和节点 j
  • 如何处理与 MongoDB 的两个不同连接
  • 节点进程如何工作?
  • 猫鼬保存功能不工作。 不被调用但没有错误
  • 表示静态服务器 - 设置 dir 文件夹
  • 邮局 / 快递不在 Safari 移动公司工作
  • 在接收请求前等待数据库连接
  • Socket.IO 代码在本地工作 , 不在服务器上运行
  • Sock.IO 简易快车不工作的例子
  • 如何在 PeerJS 服务器 ( 带 express ) 获取连接用户列表 ?
  • 安装快捷方式时不会出现 NPC 错误
  • 如果我的 RESTful api 将图像存储在文件系统中 , 那么客户端在提出获取请求时如何获取图像 ?
  • 发布 Express 和中间件