数据库连接后,Express res无法正常工作

时间:2019-06-01 22:52:02

标签: node.js express

我尝试将DB与Node.js连接。如果我从控制台启动脚本,一切似乎都很好。但是从浏览器访问时,连接时响应停止

从控制台,我得到 内部比赛 示例全部在端口3000上监听! 连接骗局!

从浏览器中,我得到 Hello World!里面最安静

由于控制台版本中的“正在侦听...”消息位于“已连接”之前,所以我认为在浏览器版本中,也许系统在连接至数据库之前已获得res.end()。因此,我将res.end()从app.get -function的末尾移到restest -function的末尾,然后将send()-放到原始位置,以防万一。但这不是原因,因为我仍然无法获得“ Connected Res!”消息。

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}!`));

没有错误消息,它只是在写完“ inside restest”之后停止响应

2 个答案:

答案 0 :(得分:0)

我相信您会混淆一些同步/异步概念。

尝试类似的方法可能会有所帮助:

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 :(得分:0)

因此,这里发生的事情是:调用/nodejs api后,它将编写Hello World!文本,然后转到restest函数,并编写{{1 }},然后它将开始异步连接到数据库,因为inside restest是一个异步函数,它将返回到DB connect函数,并使用restest发送响应。因此,在此之后,res.send("this should not print out");函数内部将无法再访问res