Node.js-Express&mysql TypeError:尽管插入成功,但res.json不是函数

时间:2018-07-13 09:11:04

标签: mysql node.js express

虽然我插入成功,但是要返回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?

2 个答案:

答案 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