如何解决 TypeError: config.query is not a function

时间:2021-07-26 13:05:55

标签: node.js sql-server express authentication registration

我对 Node.js 和 Mssql 还很陌生。在索引文件中查找我在 config.query 中遇到错误。我试图用 mysql 代码编写类似的代码。登录页面工作正常,但是当我尝试注册时,出现错误 config.query is not a function。将 pug 用于 html 页面。 这是 App.js 文件

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var config = require('./database/config');
var session = require('express-session');

var app = express();

app.use(session({
  secret : 'ABCDefg',
  resave : false,
  saveUninitialized : true
}));

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

//Create Server
app.listen(3000,()=> {
  console.log('Listening on port 3000...');
});
module.exports = app;

这是 index.js 文件

var express = require('express');
var router = express.Router();
var mssql = require('mssql');
var bcrypt = require('bcrypt');
var config = require('../database/config');

/* GET home page. */
router.get('/', function(req, res, next) {
  if(req.session.flag ==1 ){
    req.session.destroy();
    res.render('index', { title: 'CodeLanguage',message: 'Email Already Exist', flag : 1 });
   
  }else if (req.session.flag ==2 ){
    req.session.destroy();
    res.render('index', { title: 'CodeLanguage',message: 'Registration Done. Please Login', flag : 0 });
  }
  else if (req.session.flag ==3 ){
    req.session.destroy();
    res.render('index', { title: 'CodeLanguage',message: 'Confirm Password Does Not Match.', flag : 1 });
  }else if (req.session.flag ==4 ){
    req.session.destroy();
    res.render('index', { title: 'CodeLanguage',message: 'Incorrect Email or Password', flag : 1  });
  }else{
    res.render('index', { title: 'CodeLanguage' });
  }
      
    });
//handle POST request for User Regisitratşon
router.post('/auth_reg',function(req,res,next){
  var fullname = req.body.fullname;
  var email = req.body.email;
  var password = req.body.password;
  var cpassword = req.body.cpassword;

  if(cpassword == password){
    var sql = 'select*from user where email = ?;' ;

    config.query(sql,[email],function(err,result,fields){
      if(err) throw err;

      if(result.length > 0){
        req.session.flag= 1;
        res.redirect('/');
      }
      else {

        var hashpassword = bcrypt.hashSync(password,10);
        var sql = 'insert into user(fullname,email,password) values(?,?,?)';
        config.query(sql,[fullname,email, hashpassword], function(err,result,fields){
          if(err) throw err;
          req.session.flag = 2;
          res.redirect('/');
        });
      }
    });
  }else{
    req.session.flag =3 ;
    res.redirect('/');
  }
});


//Handle POST request for User Login
router.post('/auth_login', function(req,res,next){
  var email = req.body.email;
  var password = req.body.password;
  var sql = 'select*from user where email = ?;';

  config.query(sql,[email], function(err,result,fields){
    if (err) throw err;

    if(result.length && bcrypt.compareSync(password,result[0].password)){  
      req.session.email = email;
      res.redirect('/home');
    }else{
      req.session.flag=4;
      res.redirect('/');
    }
  });
});

//Route for home page
router.get('/home',function(req,res,next){
  res.render('/home', {message: 'Welcome, '+ req.session.email});
});

router.get('/logout', function(req,res,next){
  if(req.session.email){
    req.session.destroy();
  }  
  res.redirect('/');
});
module.exports = router;

这是config.js文件

var mssql = require ('mssql');
var express = require('express');
var Connection = require('tedious').Connection;  


var config = {
    user: 'sa',
    password: '1',
    server: 'LAPTOP-US1RSKFM\SQLEXPRESS',  
    database: 'login_sys'
};
var connection = new Connection(config);  
connection.on('connect', function(err) {  
      // If no error, then good to proceed.
    console.log("Connected");  
});
  
connection.connect();

module.exports = config;

1 个答案:

答案 0 :(得分:0)

config.query 不是函数,因为 config.query 未定义。在 config.js 中定义和导出 query 对象时未包含 config 属性

var config = {
    user: 'sa',
    password: '1',
    server: 'LAPTOP-US1RSKFM\SQLEXPRESS',  
    database: 'login_sys',
    // query: () => ...
};