我最近在自学nodejs
自己写了一个前端页面通过ajax请求服务器,服务器收到信息后存到mysql 并把收到的信息打印出来
我发现有一个没有规律出现的问题,就是运行的好好的 忽然前端页面提交的信息后服务器没反应了,也不打印出来,但是按了ctrl+c后
又立马运行并打印出来收到的信息,,,求大神指教为什么啊
我是不是描述的有点混乱。。
上代码。。。
const http = require(‘http’); const querystring = require(‘querystring’) const db = require(’./db’); const url = require(’./url’);
var sql = ‘insert into table2 values(?,?)’; var getsql = ‘select * from table2’;
var server = http.createServer(function(req,res){ var reqdata = ‘’; switch(req.url){ case url.url.save: req.on(‘data’,function(chunk){ reqdata += chunk; console.log(reqdata); reqdata = querystring.parse(reqdata); console.log(reqdata.num); }); req.on(‘end’,function(){
var params = [
reqdata.num,
reqdata.name
];//传入的num和name
console.log('end');
db.dbconnection.query(sql,params,function(err,rows){
if(err){
haderror(err,res);
}
else{
sqlend(res);
}
});
});
break;
case url.url.get:
console.log('enter get');
req.on('data',function(chunk){
reqdata += chunk;
console.log(reqdata);
reqdata = querystring.parse(reqdata);
});
req.on('end',function(){
console.log('enter get end');
db.dbconnection.query(getsql,function(err,rows){
if(err){
haderror(err,res);
}
else{
getsqlend(res,rows);
}
});
});
break;
default:console.log(req.url);
}
});
server.listen(3000,function(err){ console.log(‘server is running’); });
function sqlend(res){
var success = querystring.parse("message=success");
console.log(success);
res.writeHead(200,{
'contenType':'application/json',
'Access-Control-Allow-Origin':'*'
});
res.end(JSON.stringify(success));
}
function getsqlend(res,rows){ var data = JSON.stringify(rows); res.writeHead(200,{ ‘contenType’:‘application/json’, ‘Access-Control-Allow-origin’:’*’ }); res.end(data);
}
function haderror(err,res){ console.log(err.code); res.end(err.code); }
刚学 代码可能有点乱
@jxycbjhc 这是服务器的代码。。.(’/db’)和(’./url’)分别是自己写的一个mysql数据引入和存储url的文件,,url 的代码是 const url = { save:’/save’, get:’/get’ }; module.exports.url = url;
./db的代码是
const mysql = require(‘mysql’);
const db={ host:‘localhost’, port:‘3306’, user:‘root’, password:‘1234’, database:‘fdatabase’ }
const dbconnection = mysql.createConnection({ host:db.host, port:db.prot, user:db.user, password:db.password, database:db.database });
dbconnection.connect();
module.exports.dbconnection = dbconnection;
好好格式化一下你的代码
const http = require('http');
const querystring = require('querystring');
const db = require('./service');
const url = {
save: '/save',
get: '/get'
};
var sql = 'insert into table2 values(?,?)';
var getsql = 'select * from table2';
var server = http.createServer(function (req, res) {
var reqdata = '';
console.log(req.url);
switch (req.url) {
case url.save:
req.on('data', function (chunk) {
reqdata += chunk;
console.log(reqdata);
reqdata = querystring.parse(reqdata);
console.log(reqdata.num);
});
req.on('end', function () {
var params = [
reqdata.num,
reqdata.name
];// 传入的num和name
console.log('end');
db.dbconnection.query(sql, params, function (err, rows) {
if (err) {
haderror(err, res);
} else {
sqlend(res);
}
});
});
break;
case url.get:
console.log('enter get');
req.on('data', function (chunk) {
reqdata += chunk;
console.log(reqdata);
reqdata = querystring.parse(reqdata);
});
req.on('end', function () {
console.log('enter get end');
db.dbconnection.query(getsql, function (err, rows) {
if (err) {
haderror(err, res);
} else {
getsqlend(res, rows);
}
});
});
break;
default:console.log(req.url);
}
});
server.listen(3000, function (err) {
if (err) {
console.warn();
}
console.log('server is running');
});
function sqlend (res) {
var success = querystring.parse('message=success');
console.log(success);
res.writeHead(200, {
'contenType': 'application/json',
'Access-Control-Allow-Origin': '*'
});
res.end(JSON.stringify(success));
}
function getsqlend (res, rows) {
var data = JSON.stringify(rows);
res.writeHead(200, {
'contenType': 'application/json',
'Access-Control-Allow-origin': '*'
});
res.end(data);
}
function haderror (err, res) {
console.log(err.code);
res.end(err.code);
}
这是我的运行
你这个报错不也出来了吗。。。ER_NO_SUCH_TABLE
通过控制台打印我也遇到过这种问题,后来直接上了pm2就好了,想看打印直接pm2 log
但原因…是不是打印太多占用了太多的控制台缓冲区?
说另一个问题: reqdata = querystring.parse(reqdata); 应该放在’end’的回调中处理,这样reqdata才是真实的完整的数据
我没看代码…不过如果是windows系统的话…cmd或者powershell的快速编辑在设置里面关了试试…
同意楼上,快速编辑模式的时候,鼠标不小心点到cmd某个位置可能让正在运行的进程卡住
@lzszone 好的谢谢
@peasonlee 噢噢噢 我懂了 谢谢
原因找到啦 感谢各位,特别是楼下提供问题答案的两位,是因为不小心点到windows的CMD的文字导致的,怪不得是随机的,感谢感谢