运行 npm start 后如何调试 Nodejs 应用程序错误?
Posted
技术标签:
【中文标题】运行 npm start 后如何调试 Nodejs 应用程序错误?【英文标题】:How to debug Nodejs Application Error after run npm start? 【发布时间】:2018-07-13 02:32:48 【问题描述】:我是 Nodejs 开发的新手
我跑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
我发现了这条线
在对象。 (/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
;
我看错文件了吗?
【问题讨论】:
似乎companyController.getCompanyBySession
未定义。
@JoeClay 我加了companies.js
,你能再帮上一步吗。
@ihue: getCompanyBySession
不存在,但您正在尝试在路由器中注册它。您的意思是改用getCompany
吗?
知道了。我现在看到了。让我添加它。谢谢。我现在更了解如何调试了。
【参考方案1】:
您调用了一个无法在您的依赖项中解析的函数,因此它被评估为undefined
。
可能你只是在函数名称中有错字,所以请确保你在authRoutes.js
中使用的函数确实存在于你的控制器文件中。
【讨论】:
【参考方案2】:您在路由中使用了控制器中不存在的任何功能。
检查路由文件中的每个函数
【讨论】:
你能详细说明你的答案吗?以上是关于运行 npm start 后如何调试 Nodejs 应用程序错误?的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu14.04下nodejs + npm + bower的安装调试和部署