//auth router.js
const express = require("express");
const authService = require("../service/AuthService.js");
const router = express.Router();
router.post('/signup',async function(req, res,next){
try{
const body = req.body;
const params = [body.email,body.password,body.nickname];
const rst = await authService.signup(params);
res.status(200);
}catch(err){
console.log(err);
next(err);
res.status(404).send("duplicated email address");
}
})
module.exports = router;
// authService.js
const memberRepository = require("../repository/memberRepository");
const {v4: uuidv4} = require("uuid");
const nodemailer = require('nodemailer');
const dotenv = require('dotenv');
const redis = require('redis');
dotenv.config();
const redisClient = redis.createClient({legacyMode: true});
redisClient.on('connect', () => {
console.info('RedisConnected!')
})
redisClient.connect().then();
redisClient.auth(1234);
const redisCli = redisClient.v4;
const transporter = nodemailer.createTransport({
host:"smtp.gmail.com",
port:587,
auth:{
user:'',
pass: ''
}
});
class AuthService{
signup(params){
try{
return memberRepository.signup(params);
}catch(err){
console.log("eqrwqrqrqrq");
}
}
}
const authService = new AuthService();
module.exports = authService;
const db = require("../config/mysql.js");
class MemberRepository{
signup(params){
const sql = "insert into MEMBER (email,pw,nickname) values(?,?,?)";
const conn =db.init();
try{
conn.query(sql, params ,function(err,result){
if(err){
//console.log("query is not excuted: "+ err);
console.log('rrrrrrrrrrrrrrrrrrrrrr');
return;
}
else{
return result;
}
});
const [result] = conn.execute(sql,params);
return result;
}catch(err){
console.log('fffff');
return {code:500 , message:'eeeee'}
}finally{
conn.end();
}
}
}
const memberRepository = new MemberRepository;
module.exports = memberRepository;
我正在尝试在express中实现注册功能
但它不能很好地处理错误
当我使用现有电子邮件注册时
快递服务器显示错误消息,例如
RedisConnected!
fffff
{ code: 500, message: 'eeeee' }
rrrrrrrrrrrrrrrrrrrrrr
node:events:496
throw er; // Unhandled 'error' event
^
Error: Duplicate entry '' for key 'MEMBER.email'
at Packet.asError (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/packets/packet.js:738:17)
at Execute.execute (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/commands/command.js:29:26)
at Connection.handlePacket (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:481:34)
at PacketParser.onPacket (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:97:12)
at PacketParser.executeStart (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/packet_parser.js:75:16)
at Socket.<anonymous> (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:104:25)
at Socket.emit (node:events:518:28)
at addChunk (node:internal/streams/readable:559:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
at Readable.push (node:internal/streams/readable:390:5)
Emitted 'error' event on Connection instance at:
at Connection._notifyError (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:252:12)
at Connection._handleFatalError (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:183:10)
at Connection.handlePacket (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:491:12)
at PacketParser.onPacket (/home/wo/DEV/CodeComm_front/CodeComm_front/code_comm_back/node_modules/mysql2/lib/connection.js:97:12)
[... lines matching original stack trace ...]
at Readable.push (node:internal/streams/readable:390:5) {
code: 'ER_DUP_ENTRY',
errno: 1062,
sqlState: '23000',
sqlMessage: "Duplicate entry '' for key 'MEMBER.email'",
sql: 'insert into MEMBER (email,pw,nickname) values(?,?,?)',
fatal: true
}
服务器关闭
我尝试添加类似的代码
process.on('unhandleRejection', (err, result) => {
err.message, err.code, err.stack
})
process.on('uncaughtException', (err, result) => {
err.message, err.code, err.stack
})
在app.js中
但是axios收不到express服务器的响应。
例如,当我通过 axios 向服务器发送请求 5 次时,服务器仅保留响应,如果服务器关闭, 服务器向前端axios发送5次响应
服务器关闭的原因是因为您的函数是在异步完成所有操作后调用的。
您不需要同时使用回调和 Promise 类型的查询执行方法,使用任意一种即可。
const db = require("../config/mysql.js");
class MemberRepository{
signup(params){
const sql = "insert into MEMBER (email,pw,nickname) values(?,?,?)";
const conn = db.init();
try{
return conn.execute(sql,params);
}catch(err){
console.log('fffff');
return {code:500 , message:'eeeee'}
}finally{
conn.end();
}
}
}
const memberRepository = new MemberRepository();
module.exports = memberRepository;