运行npm start后如何调试Nodejs应用程序错误?

时间:2018-02-02 14:53:25

标签: node.js express node-modules package.json

我是Nodejs developpement的新手

我运行npm start

我得到了

> api@1.0.0 start /Users/john/Sites/project/api                                                                                                              
> export NODE_ENV=development && node index.js                                                                                                                 

{ username: 'postgres',                                                                                                                                        
  password: '',                                                                                                                                                
  database: 'project',                                                                                                                                        
  host: 'localhost',                                                                                                                                           
  dialect: 'postgres' }                                                                                                                                        
CompanyFeatures                                                                                                                                                
RolePermission                                                                                                                                                 
Roles                                                                                                                                                          
Features                                                                                                                                                       
/Users/john/Sites/project/api/node_modules/express/lib/router/route.js:202                                                                                   
        throw new Error(msg);                                                                                                                                  
        ^                                                                                                                                                      

Error: Route.get() requires a callback function but got a [object Undefined]                                                                                   
    at Route.(anonymous function) [as get] (/Users/john/Sites/project/api/node_modules/express/lib/router/route.js:202:15)                                   
    at Function.proto.(anonymous function) [as get] (/Users/john/Sites/project/api/node_modules/express/lib/router/index.js:510:19)                          
    at Object.<anonymous> (/Users/john/Sites/project/api/routes/authRoutes.js:59:8)                                                                          
    at Module._compile (module.js:643:30)                                                                                                                      
    at Object.Module._extensions..js (module.js:654:10)                                                                                                        
    at Module.load (module.js:556:32)                                                                                                                          
    at tryModuleLoad (module.js:499:12)                                                                                                                        
    at Function.Module._load (module.js:491:3)                                                                                                                 
    at Module.require (module.js:587:17)                                                                                                                       
    at require (internal/module.js:11:18)                                                                                                                      
    at Object.<anonymous> (/Users/john/Sites/project/api/index.js:5:25)                                                                                      
    at Module._compile (module.js:643:30)                                                                                                                      
    at Object.Module._extensions..js (module.js:654:10)                                                                                                        
    at Module.load (module.js:556:32)                                                                                                                          
    at tryModuleLoad (module.js:499:12)                                                                                                                        
    at Function.Module._load (module.js:491:3)                                                                                                                 
    at Function.Module.runMain (module.js:684:10)                                                                                                              
    at startup (bootstrap_node.js:187:16)                                                                                                                      
    at bootstrap_node.js:608:3                                                                                                                                 
npm ERR! code ELIFECYCLE                                                                                                                                       
npm ERR! errno 1                                                                                                                                               
npm ERR! api@1.0.0 start: `export NODE_ENV=development && node index.js`                                                                                       
npm ERR! Exit status 1                                                                                                                                         
npm ERR!                                                                                                                                                       
npm ERR! Failed at the api@1.0.0 start script.                                                                                                                 
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.                                                             

npm ERR! A complete log of this run can be found in:                                                                                                           
npm ERR!     /Users/john/.npm/_logs/2018-02-02T14_45_54_187Z-debug.log   

我发现了这一行

  

at Object。 (/Users/john/Sites/project/api/routes/authRoutes.js:59:8)

我突然看到authRoutes.js,我真的没有发现任何错误。

// Dependencies
const Router = require('express').Router();
const userController = require('../controllers/users');
const companyController = require('../controllers/companies');
const permissionController = require('../controllers/permission');
const roleController = require('../controllers/role');
const featureController = require('../controllers/feature');
const fs = require('fs');
const path = require('path');

// Routes
Router.get('/', (req, res) => res.status(200).send({
  message: 'Welcome to the auth test API!',
}));

// Fetch user
Router.get('/info', userController.getUser);

Router.post('/profile', userController.updateProfile);

Router.post('/upload', userController.uploadImage);

Router.post('/removeUpload', async (req, res) => {
  try {
    console.log("removeUpload",req.body);
    if(req.body.filename)
      fs.unlink(req.body.filename);

    res.send({
      success: true
    });
  } catch (err) {
    res.status(400).send({
      error: err
    })
  }
});

Router.delete('/users', userController.deleteUser);


// Fetch User Details
Router.get('/user/:id', userController.getUserById);

// For Updating User Details
Router.put('/user', userController.updateProfileByID);

// For Removing User Details
Router.delete('/user', userController.deleteUserByID);

// For Company Operation
// Adding New Company Details
Router.post('/company', companyController.saveCompany);

// Fetch Company Details
Router.get('/company/:id', companyController.getCompany);

// Fetch Company Details
Router.get('/company', companyController.getCompanyBySession);

// Fetch All Company Details
Router.get('/companies', companyController.getCompanies);

// Fetch All Company Users Details
Router.get('/companyUser/:id', companyController.getCompanyUsers);

// For Updating Company Details
Router.put('/company', companyController.updateCompany);

// For Removing Company Details
Router.delete('/company', companyController.deleteCompany);

// For Permission Operation
// Adding New Permission Details
Router.post('/permission', permissionController.savePermission);

// Fetch Permission Details
Router.get('/permission/:id', permissionController.getPermission);

// Fetch All Permission Details
Router.get('/permissions', permissionController.getPermissions);

// For Updating Permission Details
Router.put('/permission', permissionController.updatePermission);

// For Removing Permission Details
Router.delete('/permission', permissionController.deletePermission);

/*** features ***/

Router.post('/feature', featureController.saveFeature);

// Fetch Role Details
Router.get('/feature/:id', featureController.getFeature);

// Fetch All Roles Details
Router.get('/features', featureController.getFeatures);

// For Updating Role Details
Router.put('/feature', featureController.updateFeature);

// For Removing Role Details
Router.delete('/feature', featureController.deleteFeature);

/*** roles ***/

Router.post('/role', roleController.saveRole);

// Fetch Role Details
Router.get('/role/:id', roleController.getRole);

// Fetch All Roles Details
Router.get('/roles', roleController.getRoles);

// For Updating Role Details
Router.put('/role', roleController.updateRole);

// For Removing Role Details
Router.delete('/role', roleController.deleteRole);


// Signup User
Router.post('/user', userController.createUser);

module.exports = Router;

companies.js

/******** To Perform CRUD Operation on Company ********/
const config = require('../config/config');
const Company = require('../pg/models').Company;
const User = require('../pg/models').User;
const Feature = require('../pg/models').Features;
const CompanyFeature = require('../pg/models').CompanyFeatures;
console.log(CompanyFeature);
const Permission = require('../pg/models').Permission;

const utils = require('../controllers/utils');
const moment = require('moment');
const bcrypt = require('bcrypt');
const faker = require('faker');



// Adding New Company
async function saveCompany(req, res) {
  try {
    const companyName = req.body.companyName ? req.body.companyName.trim() : null;
    const city = req.body.city ? req.body.city.trim() : '';
    const limit = req.body.limit ? req.body.limit : 200;
    const logo = req.body.logo ? req.body.logo : '';
    const features = req.body.features ? req.body.features : null;
    // const contactNumber = req.body.contactNumber ? req.body.contactNumber.trim() : '';

    if (!companyName || !city) {
      return res.status(400).send({
        error: 'Company name and City are required.'
      });
    }

    if (req.user.role !== 'Super') {
      return res.status(400).send({
        error: 'You are not authorized to perform this action .Contact your admin'
      });
    }

    // Check if name already exists
    let company = await Company.findAll({
      where: {
        companyName: {
          $eq: companyName
        }
      },
    });

    if (company.length) {
      return res.status(400).send({
        error: 'The Company is already registered.'
      });
    }

    const newCompany = {
      companyName,
      city,
      limit,
      logo
      // contactNumber
    };
    let company_id = '';
    let companyData = await Company.create(newCompany);

    const salt = bcrypt.genSaltSync(10);
    const hash = bcrypt.hashSync(config.defaultAdminPassword, salt);

    const companyEmail = faker.internet.email(companyName).toLowerCase();
    const companyUsername = faker.internet.userName(companyName);
    const companyfirstName = 'Company';
    const companylastName = 'Admin';

    let permissionData = await Permission.find({
      where: {
        'permissionName': {
          $eq: 'High'
        }
      }
    });

    // console.log(permissionData);

    const newUser = {
      userName: companyUsername,
      email: companyEmail,
      password: hash,
      firstName: companyfirstName,
      lastName: companylastName,
      updatedBy: req.user.id,
      isVerified: true,
      imagePath: logo,
      companyId: companyData.dataValues.id,
      permissionId: permissionData.dataValues.id
    };
    // default verified with pwd
    let userData = await User.create(newUser);

    /** create features ****/
    var newCompanyFeatures = [];

    features.forEach(function (per) {

        newCompanyFeatures.push({
            company_id: companyData.dataValues.id,
            feature_id: per

        });
    });
    console.log(newCompanyFeatures);
    console.log("jai shree ram");
    await CompanyFeature.bulkCreate(newCompanyFeatures);
    return res.json({
      'success': true,
      'message': 'Successfully Created',
      'id': companyData.dataValues.id,
      'email': userData.dataValues.email
    });
  } catch (err) {
    console.log("Error Adding Company.", err);
    res.status(400).send({
      error: err.message
    })
  }
}

// Get Company
async function getCompany(req, res) {
  try {
    console.log(req.params.id);
    let company = await Company.findById(req.params.id);
    let featureData;
    featureData = await Feature.findAll({});
    if (company) {
      return res.json({
        id: company.id,
        companyName: company.companyName,
        city: company.city,
        limit: company.limit,
        logo: company.logo,
        features:featureData
      });
    } else {
      return res.status(401).send({
        error: 'No company found'
      });
    }

  } catch (err) {
    console.log("company Error", err);
    res.status(400).send({
      error: err.message
    })
  }
}

//Get Companies
async function getCompanies(req, res) {
  try {
    console.log(req.user);
    let companyData;
    let featureData;
    if (req.user.role === 'Super') {

      featureData = await Feature.findAll({});
      companyData = await Company.findAll({
        attributes: {
          exclude: ['updatedBy', 'createdAt', 'updatedAt']
        },
        include: [{
            model: User,
            attributes: ['email','userName']
          }
        ],
        where: {
          'companyName': {
            $ne: 'Admin'
          }
        }
      });

    } else if (req.user.role !== 'Super') {

      featureData = await Feature.findAll({});
      companyData = await Company.findAll({
        attributes: {
          exclude: ['updatedBy', 'createdAt', 'updatedAt']
        },
        include: [{
            model: User,
            attributes: ['email','userName']
          }
        ],
        where: {
          'companyName': {
            $ne: 'Admin'
          },
          'id': req.user.companyId
        },
      });

    }

    // companyData = companyData.toJSON();
    // console.log(companyData);
    let companies = [];

    let companiesResp = await Promise.all(companyData.map(
      async company => {
        // console.log(company);
        companies.push({
          id: company.id,
          companyName: company.companyName,
          city: company.city,
          limit: company.limit,
          logo: company.logo,
          email: company.Users[0].email
        });
      }));

    return res.json({
      'companies': companies,
      'features':featureData
    });

  } catch (err) {
    console.log("company Error", err);
    res.status(400).send({
      error: err.message
    })
  }
}


//Get Users
async function getCompanyUsers(req, res) {
  try {

    // if (req.user.role !== 'Super') {
    //   return res.status(400).send({
    //     error: 'You are not authorized to perform this action .Contact your admin'
    //   });
    // }

    // let usersData = await User.findAll({
    //   where: {
    //     'companyId': {
    //       $eq: req.params.id
    //     }
    //   }
    // });
    let usersData;

    if (req.user.role !== 'None') {

      usersData = await User.findAll({
        attributes: {
          exclude: ['createdAt', 'updatedAt']
        },
        include: [{
            model: Permission,
            attributes: ['permissionName','priority']
          }
        ],
        where: {
          'companyId': {
            $eq: req.params.id
          }
        }
      });

    } else if (req.user.role !== 'Super') {

      usersData = await User.findAll({
        attributes: {
          exclude: ['createdAt', 'updatedAt']
        },
        include: [{
            model: Permission,
            attributes: ['permissionName','priority']
          }
        ],
        where: {
          'id': {
            $eq: req.user.id
          }
        }
      });

    }


    if (!usersData.length) {
      return res.status(400).send({
        error: 'No user for this company'
      });
    }

    let users = [];

    let usersResp = await Promise.all(usersData.map(
      async user => {
        // console.log(user);
        users.push({
          id: user.id,
          firstName: user.firstName,
          lastName: user.lastName,
          userName: user.userName,
          email: user.email,
          permission: user.Permission.permissionName,
          priority: user.Permission.priority,
          isVerified: user.isVerified,
          imagePath: user.imagePath
        });
      }));

    return res.json({
      'users': users
    });

  } catch (err) {
    console.log("users Error", err);
    res.status(400).send({
      error: err.message
    })
  }
}

//Update Company
async function updateCompany(req, res) {
  try {
    let updateData = {
      'city': req.body.city,
      'limit': req.body.limit ? req.body.limit : 200,
      'logo': req.body.logo ? req.body.logo : ''
    };
    const features = req.body.features ? req.body.features : null;

    if(req.body.companyName){
      updateData.companyName = req.body.companyName ;
    }

    await Company.update(updateData, {
      where: {
        'id': {
          $eq: req.body.id
        }
      }
    });
    let companyDelete = await CompanyFeature.destroy({
      where: {
        'company_id': {
          $eq: req.body.id
        }
      }
    });
    /** create features ****/
    var newCompanyFeatures = [];

    features.forEach(function (per) {

        newCompanyFeatures.push({
            company_id: req.body.id,
            feature_id: per

        });
    });
    console.log(newCompanyFeatures);
    console.log("jai shree ram");
    await CompanyFeature.bulkCreate(newCompanyFeatures);
    return res.json({
      'success': true,
      'message': 'Successfully updated'
    });
  } catch (err) {
    console.log("updateCompany Error", err);
    res.status(400).send({
      error: err.message
    })
  }
}

//Delete Company
async function deleteCompany(req, res) {
  try {

    if (req.user.role !== 'Super') {
      return res.status(400).send({
        error: 'You are not authorized to perform this action .Contact your admin'
      });
    }

    let userDelete = await User.destroy({
      where: {
        'companyId': {
          $eq: req.body.id
        }
      }
    });

    let companyDelete = await Company.destroy({
      where: {
        'id': {
          $eq: req.body.id
        }
      }
    });
    let companyfeatureData = await CompanyFeature.destroy({
      where: {
        'company_id': {
          $eq: req.body.id
        }
      }
    });
    console.log(userDelete,companyDelete);
    if(userDelete && companyDelete) {
      return res.json({
        'success': true,
        'message': 'Successfully deleted'
      });
    } else {
      return res.status(400).send({
        error: 'No compnay found'
      });
    }
  } catch (err) {
    console.log("deleteCompany Error", err);
    res.status(400).send({
      error: err.message
    })
  }
}

// Exports
module.exports = {
  saveCompany,
  getCompany,
  updateCompany,
  deleteCompany,
  getCompanies,
  getCompanyUsers
};

AM我看错了文件?

问题

如何继续进行调试?

我现在对任何建议持开放态度。

任何提示/建议/帮助都将非常感谢!

2 个答案:

答案 0 :(得分:1)

您已在路径中使用控制器中不存在的任何功能。

检查路线文件中的每个功能

答案 1 :(得分:1)

您调用了一个无法在依赖项中解析的函数,因此将其计算为undefined。 可能你只是在函数名中有一个拼写错误,所以请确保你在authRoutes.js中使用的函数实际存在于你的控制器文件中。