Heroku显示NodeJS应用程序的应用程序错误,即使它在我的本地机器上完美运行



在我将项目部署到Heroku并运行项目之后。但是在我的浏览器中显示以下错误:

应用程序错误应用程序中出现错误,无法为您的页面提供服务。如果您是应用程序所有者,请检查日志以了解详细信息。您可以在Heroku CLI中使用命令

来完成此操作这是应用程序日志

中显示的错误2022 - 05 - 25 - t16:04:26.597488 + 00:00 heroku [web。1]:状态从crash变为starting

2022 - 05 - 25 - t16:04:28.499361 + 00:00 heroku [web。1]:使用命令node server

启动进程0 2022 - 05 - 25 - t16:04:30.162332 +应用程序web。1):节点:内部/模块/cj/装载机:1189

0 2022 - 05 - 25 - t16:04:30.162345 +应用程序web。1]:返回进程。dlopen(模块,path.toNamespacedPath(文件名));

0 2022 - 05 - 25 - t16:04:30.162345 +应用程序web。1 ]: ^2022 - 05 - 25 - t16:04:30.162346 + 00:00应用[web.1]:2022 - 05 - 25 - t16:04:30.162346 + 00:00应用(网络。1]: Error:/app/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib。节点:无效的ELF头

0 2022 - 05 - 25 - t16:04:30.162346 +应用程序web。1]: at Object.Module._extensions..节点(节点:内部/模块/cj/装载机:1189:18)

0 2022 - 05 - 25 - t16:04:30.162347 +应用程序web。1]: at模块。负载(节点:内部/模块/cj/装载机:981:32)

0 2022 - 05 - 25 - t16:04:30.162347 +应用程序web。1]: at Function.Module。_load(节点:内部/模块/cj/装载机:822:12)

0 2022 - 05 - 25 - t16:04:30.162347 +应用程序web。1]: at模块。要求(节点:内部/模块/cj/装载机:1005:19)

0 2022 - 05 - 25 - t16:04:30.162347 +应用程序web。1]: at require (node:internal/modules/cjs/helpers:102:18)

0 2022 - 05 - 25 - t16:04:30.162348 +应用程序web。1]: at Object。(/app/node_modules/bcrypt/bcrypt.js: 6:16)

0 2022 - 05 - 25 - t16:04:30.162348 +应用程序web。1]: at模块。_compile(节点:内部/模块/cj/装载机:1105:14)

0 2022 - 05 - 25 - t16:04:30.162348 +应用程序web。1]: at Object.Module._extensions. js (node:internal/modules/cjs/loader:1159:10)

0 2022 - 05 - 25 - t16:04:30.162349 +应用程序web。1]: at模块。负载(节点:内部/模块/cj/装载机:981:32)

0 2022 - 05 - 25 - t16:04:30.162349 +应用程序web。1]: at Function.Module。_load (node:internal/modules/cjs/loader:822:12) {

0 2022 - 05 - 25 - t16:04:30.162349 +应用程序web。1]: code: 'ERR_DLOPEN_FAILED'

0 2022 - 05 - 25 - t16:04:30.162349 +应用程序web。1:}

这是我的代码

server.js

const express = require('express')
const morgan = require('morgan')
const cors = require('cors')
const connectDB = require('./config/db')
const passport = require ('passport')
const bodyparser = require('body-parser')
const routes = require('./routes/index')
connectDB()
const app = express()
if(process.env.NODE_ENV === 'development'){
app.use(morgan('dev'))
}
app.use(cors())
app.use(bodyparser.urlencoded({extended: false}))
app.use(bodyparser.json())
app.use(routes)
app.use(passport.initialize())
require('./config/passport')(passport)
const PORT = process.env.PORT || 3000
app.listen(PORT, console.log(`Server running in ${process.env.NODE_ENV} mode on port ${PORT}`))

index.js

const express = require('express')
const actions = require('../methods/actions')
const router = express.Router()
router.get('/', (req,res)=>{
res.send('Hello World')
})
router.get('/dashboard', (req,res)=>{
res.send('dashboard')
})
//@desc Adding New User
//@route POST/adduser
router.post('/adduser', actions.addNew)
//@desc Authenticate User
//@route POST/authenticate
router.post('/authenticate', actions.authenticate)
//@desc get info on a User
//@route POST/getinfo
router.get('/getinfo', actions.getinfo)
module.exports = router

package.json

{
"name": "ceyloncrafts",
"version": "1.0.0",
"description": "ceylon crafts ",
"main": "index.js",
"scripts": {
"start": "cross-env NODE_ENV=production node server.js",
"dev": "cross-env NODE_ENV=development nodemon server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.0.1",
"body-parser": "^1.20.0",
"connect-mongo": "^4.6.0",
"cors": "^2.8.5",
"cross-env": "^7.0.3",
"dotenv": "^16.0.1",
"express": "^4.18.1",
"jwt-simple": "^0.5.6",
"mongoose": "^6.3.4",
"morgan": "^1.10.0",
"nodemon": "^2.0.16",
"passport": "^0.5.3",
"passport-jwt": "^4.0.0"
}
}

db.js

const mongoose =  require('mongoose')
const dbConfig = require ('./dbconfig')
//connect database
const connectDB = async()=>{
try{
const conn = await mongoose.connect(dbConfig.database,{
useNewUrlParser: true,
useUnifiedTopology: true,
})
console.log(`MongoDB Connected: ${conn.connection.host}`)
}
catch(err){
console.error(err)
process.exit(1)
}
}
module.exports = connectDB

action.js

var Handicraftmen = require('../models/handicraftmen')
var jwt = require('jwt-simple')
var config = require('../config/dbconfig')
var functions = {
addNew: function(req,res){
if((!req.body.firstName) || (!req.body.lastName) || (!req.body.email) || (!req.body.password) || (!req.body.NIC) || (!req.body.telephoneNo) || (!req.body.shopName) || (!req.body.shopAddress) || (!req.body.accountNo) || (!req.body.benificiaryName) || (!req.body.bank) || (!req.body.branch)){
res.json({success: false, msg:'Enter all fields'})
}
else{
var newHandicraftmen = Handicraftmen({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: req.body.password,
NIC: req.body.NIC,
telephoneNo: req.body.telephoneNo,
shopName: req.body.shopName,
shopAddress: req.body.shopAddress,
accountNo: req.body.accountNo,
benificiaryName: req.body.benificiaryName,
bank: req.body.bank,
branch: req.body.branch
});
newHandicraftmen.save(function(err, newHandicraftmen){
if(err){
res.json({success: false, msg:'Failed to save'})
}else{
res.json({success: true, msg:'Successfully saved'})
}
})
}
},
authenticate: function(req,res){
Handicraftmen.findOne({
telephoneNo: req.body.telephoneNo
}, function (err, handicraftmen){
if(err) throw err
if(!handicraftmen){
res.status(403).send({success: false, msg:'Authentication failed. User not found'})
}
else{
handicraftmen.comparePassword(req.body.password, function(err, isMatch){
if(isMatch && !err){
var token = jwt.encode(handicraftmen, config.secret)
res.json({success:true, token: token})
}
else{
return res.status(403).send({success: false, msg:'Authenticatation failed, wrong password'})
}
})
}
}
)
},
getinfo: function(req, res){
if(req.headers.authorization && req.headers.authorization.split(' ')[0] ==='Bearer' ){
var token = req.headers.authorization.split(' ')[1]
var decodedtoken = jwt.decode(token, config.secret)
return res.json({success: true, msg:'Hello ' + decodedtoken.firstName})
}
else{
return res.json({success: false, msg:'No headers'})
}
}
}
module.exports = functions

passport.js

var JwtStrategy = require('passport-jwt').Strategy
var ExtractJwt = require('passport-jwt').ExtractJwt
var Handicraftmen = require('../models/handicraftmen')
var config = require('./dbconfig')
module.exports = function(passport){
var opts = {}
opts.secretOrKey = config.secret
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt')
passport.use(new JwtStrategy(opts, function(jwt_payload, done){
Handicraftmen.find({
id: jwt_payload.id
}, function(err, handicraftmen){
if(err){
return done(err, false)
}
if(handicraftmen){
return done(null, handicraftmen)
}
else{
return done(null, false)
}
}
)
}))
}

我解决了我的错误。

bcrypt不能在heroku上工作。Bcryptjs是在heroku中工作的版本。

Nodejs Bcrypt + Heroku fail deploy

相关内容

最新更新