我尝试将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”之后停止响应
答案 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
。