虽然我插入成功,但是要返回json消息时却收到错误消息(TypeError:res.json不是函数)。这是我的设置:
const express = require('express');
module.exports = {
signup: async (req, res, next) => {
const { email, username, password } = req.value.body;
const connection = require('../config/dbconnection');
connection.query("SELECT * FROM tbl_users WHERE email = ?",[email], function(err, rows) {
if (rows.length) {
return res.json({ err: 'Email already exist'});
} else {
var newUserMysql = {
email: email,
username: username,
password: password
};
var insertQuery = "INSERT INTO tbl_users ( email, username, password ) values (?,?,?)";
connection.query(insertQuery,[newUserMysql.email, newUserMysql.username, newUserMysql.password],function(err, res, rows) {
if(err){
console.log('Insert error');
//res.json({ err: 'Insert error'});
} else {
console.log('Insert successful');
return res.json({ 'success': 'Insert successful'});
//return done(null, newUserMysql);
}
});
}
});
}
如何在成功插入后返回json?
答案 0 :(得分:2)
您的函数的res
参数被res
调用中的connection.query
返回值隐藏。
重命名此调用的res
参数为result
(例如),您应该可以:
connection.query(insertQuery,[newUserMysql.email, newUserMysql.username, newUserMysql.password],function(err, result, rows) {
if(err){
console.log('Insert error');
//res.json({ err: 'Insert error'});
} else {
console.log('Insert successful');
return res.json({ 'success': 'Insert successful'});
//return done(null, newUserMysql);
}
});
当嵌套的作用域具有变量名冲突时,将使用与您引用此冲突名最接近的变量(范围内)。
答案 1 :(得分:1)
您正在res
函数中重新定义connection.query(insertQuery, [.....], function(err, res, rows) { ...})
。
在该功能范围内,res
取代了快速路由器中的res