Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting "express.default is not a function" error when i run node server in a container

I'm getting an express.default is not a function error when i run my node server inside a remote container.

Any clues?

main.ts file:

import * as express from 'express';
...
const server = (express as any).default();
...

logs:

2020-09-04 10:58:29/main.js:112
/main.js:112
2020-09-04 10:58:29const server = express.default();
const server = express.default();
2020-09-04 10:58:29^
^
2020-09-04 10:58:29TypeError: express.default is not a function
TypeError: express.default is not a function
2020-09-04 10:58:29at Object.<anonymous> (/main.js:112:35)
at Object.<anonymous> (/main.js:112:35)
2020-09-04 10:58:29at Object.execCb (/node_modules/requirejs/bin/r.js:1946:33)
at Object.execCb (/node_modules/requirejs/bin/r.js:1946:33)
2020-09-04 10:58:29at Module.check (/node_modules/requirejs/bin/r.js:1133:51)
at Module.check (/node_modules/requirejs/bin/r.js:1133:51)
2020-09-04 10:58:29at Module.enable (/node_modules/requirejs/bin/r.js:1426:22)
at Module.enable (/node_modules/requirejs/bin/r.js:1426:22)
2020-09-04 10:58:29at Object.enable (/node_modules/requirejs/bin/r.js:1807:39)
at Object.enable (/node_modules/requirejs/bin/r.js:1807:39)
2020-09-04 10:58:29at Module.<anonymous> (/node_modules/requirejs/bin/r.js:1411:33)
at Module.<anonymous> (/node_modules/requirejs/bin/r.js:1411:33)
2020-09-04 10:58:29at /node_modules/requirejs/bin/r.js:384:23
at /node_modules/requirejs/bin/r.js:384:23
2020-09-04 10:58:29at each (/node_modules/requirejs/bin/r.js:309:31)
at each (/node_modules/requirejs/bin/r.js:309:31)
2020-09-04 10:58:29at Module.enable (/node_modules/requirejs/bin/r.js:1363:17)
at Module.enable (/node_modules/requirejs/bin/r.js:1363:17)
2020-09-04 10:58:29at Module.init (/node_modules/requirejs/bin/r.js:1038:26)
at Module.init (/node_modules/requirejs/bin/r.js:1038:26)
like image 260
babyYoda44 Avatar asked Nov 19 '25 14:11

babyYoda44


1 Answers

If you didn't change anything in tsconfig.json which means you leave this option esModuleInterop: false, so you just simply import as namespace, without calling any default function:

import * as express from "express";

const app =  express();

// compiled code will require as normally

const express = require("express");
const app = express();

Or if you switch to be true esModuleInterop: true, you would import without namespace like this:

import express from "express";

const app =  express();


// compiled code will call default function by checking first

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
const express_1 = __importDefault(require("express"));
const app = express_1.default();

like image 192
tmhao2005 Avatar answered Nov 21 '25 09:11

tmhao2005