Skip to content

"Cannot GET /" error when moving executable to a separate directory #102

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
rmrbytes opened this issue Jun 16, 2024 · 5 comments
Open

Comments

@rmrbytes
Copy link

I have a simple node js application using a combination of static html files and api paths. I find that after I generate the executable, it works in the current directory that contains the source code but does not work when moved to another directory.

The error I get on loading 'https://localhost:3000' from a different directory is: Cannot GET /

The following is the server.js

// server.js

// Import required modules
const express = require('express');
const path = require('path');

// Create an Express application
const app = express();

app.use(express.static('public'))

// api calls

app.get('/api/test', (req, res) => {
    res.send('test)
  });
})

// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

The following is: config.js

{
    "compilerOptions": {
      "target": "es2022",
      "lib": ["es2022"],
      "module": "commonjs",
      "esModuleInterop": true,
      "forceConsistentCasingInFileNames": true,
      "strict": true,
      "skipLibCheck": true
    }
 }

The following is: sea-config.json

{
    "main": "server-out.js",
    "output": "sea-prep.blob"
 }

And the following are the commands I used to create the server executable

1 Build using esbuild

npm run build

3 create blob

node --experimental-sea-config sea-config.json

4 create copy of exe

cp $(command -v node) server

5 inject experimental node

npx postject server NODE_SEA_BLOB sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2

When I run ./server from the created directory, it works. However, when I move the exe to a separate directory and run it, it gives the Cannot GET / error.

What am I doing wrong? Thanks

@rmrbytes
Copy link
Author

It seems to be that the public directory too needs to be copied. Hmm ... makes sense, I guess. I wonder if there is a way to have its content included too in the executable?

@kerwenzhang
Copy link

kerwenzhang commented Oct 14, 2024

@rmr-code Do you have a solution? I met similar problem.
I tried to add the html, css, js files which front UI need to assets:

{ 
    "main": "out.js", 
    "output": "sea-prep.blob",
    "assets": {
        "favicon.ico":"./../client/dist/client/browser/favicon.ico",
        "index.html":"./../client/dist/client/browser/index.html",
        "main.js":"./../client/dist/client/browser/main.js",
        "polyfills.js":"./../client/dist/client/browser/polyfills.js",
        "styles.css":"./../client/dist/client/browser/styles.css"
    }
}

Although I could get these files content by getAsset(), but I could not use app.use(express.static('public')) anymore.

@kerwenzhang
Copy link

@RaisinTen @jviotti @arcanis @Trott @ghoullier May I know how Node.SEA support the routing for static files?
PKG could package all necessary files (including front UI files) into one single exe, and extract them to temp folders during application running. When these files is requested, we could use express.static() to get them by auto. How should I implement this in Node SEA?

@rmrbytes
Copy link
Author

@kerwenzhang: I could not figure this out. It was something I was experimenting with and not in a production environment. So shelved it for now.

@Trott
Copy link
Member

Trott commented Oct 14, 2024

@nodejs/single-executable

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants