Search code examples
node.jsexpressherokudeployment

Deployment of Express application on Heroku Error : Cannot find module '/app/server.js'


I've been trying to deploy my Express application on Heroku and the build gets created successfully but when I try to open it, I'm greeted with an error message that basically states that the page could not be served.

So, I run heroku logs --tail and then I get the following error messages :

One half of the error messages

Remaining half of the error messages

File Tree

Procfile

web: node server.js

Package.json

{
      "name": "conduit-api",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "node server.js"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "bcrypt": "^5.0.1",
        "body-parser": "^1.19.0",
        "cors": "^2.8.5",
        "express": "^4.17.1",
        "jsonwebtoken": "^8.5.1",
        "nodemon": "^2.0.12",
        "pg": "^8.7.1",
        "pg-hstore": "^2.3.4",
        "redux-persist": "^6.0.0",
        "sequelize": "^6.6.5"
      },
      "devDependencies": {
        "cross-env": "^7.0.3"
      }
    }

server.js

const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const { sequelize } = require('./src/entities/User/User');
const db = require('./src/config/Database');
const feedRoute = require('./src/routes/Feed/Feed');
const usersRoute = require('./src/routes/Users/Users');
const userRoute = require('./src/routes/User/User');
const articlesRoute = require('./src/routes/Articles/Articles');
const profilesRoute = require('./src/routes/Profiles/Profiles');
const commentsRoute = require('./src/routes/Comments/Comments');

const app = express();

app.use(cors());

app.use(bodyParser.json());

//  Routes

app.use('/api/feed', feedRoute);

app.use('/api/users', usersRoute);

app.use('/api/user', userRoute);

app.use('/api/articles', articlesRoute);

app.use('/api/profiles', profilesRoute);

app.use('/api/articles', commentsRoute);

// REQUESTS

app.get('/', async (req,res) => {
    res.json('Yooooooooooo')
    try {
        await db.authenticate();
        console.log('Connection has been established');
    } catch(err) {
        console.log('Error');
    }
})

// To START sequelize and also wipes the DB clean

// async function main() {
//     await sequelize.sync({force: true})
// }

// main()

// TO START sequelize 

const PORT = process.env.PORT || 3000;

app.listen(PORT , () => {
    console.log(`App is listening to ${PORT}`);
})

I've tried modifying my procfile and removing and re-installing the modules but the problem still persists.

I've been stuck on this for days now and any sort of help would be highly appreciated.


Solution

  • Looks like you problem is your pointing the main in package.json to a file that doesn't exist.

    Package.json

    "main": "index.js"
    

    Your app seems to deploy from you server.js file.

    The main field is a module ID that is the primary entry point to your program. as per documentation: https://docs.npmjs.com/cli/v7/configuring-npm/package-json#main