'Module has no exported member, 'Request'
I see there are a ton of posts on this topic, but I didn't see any related to Express and my particular issue, which is:
import * as express from 'express';
import { Request, Response, Application } from 'express'; // <-- Error here
gives me an error (Module has no imported member for 'Request', 'Response' and 'Application').
I see that in node_modules there are the files request.js, response.js, and application.js listed in the /lib sub-directory. Based on the error trace, my guess is that Express is not checking in the /lib sub-directory. How can I force/guide the system to check in the /lib sub-directory when using import? (Or is that not the problem and there's another problem altogether?).
I tried import { Request, Response, Application } from 'express/lib', and import * as expressLib from 'express/lib and then import {Request, Response, Application } from expressLib, but neither of those worked.
Note: I have the following code below the imports . . . Because Request and Response are Object types, I assume they should be left in upper-case?
import * as express from 'express';
// import * as expressLib from 'express/lib'
import { Request, Response, Application } from 'express';
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
import * as jwt from 'jsonwebtoken';
import * as fs from "fs";
const app: Application = express();
app.use(bodyParser.json());
app.route('api/login')
.post(loginRoute);
const RSA_PRIVATE_KEY = fs.readFileSync('/demos/private.key');
export function loginRoute(req: Request, res: Response) {
const email = req.body.email,
password = req.body.password;
if (validateEmailAndPassword()) {
const userId = findUserIdForEmail(email);
const jwtBearerToken = jwt.sign({}, RSA_PRIVATE_KEY, {
algorithm: 'RS256',
expiresIn: 120,
subject: userId
});
// res.cookie("SESSIONID", jwtBearerToken, {httpOnly: true, secure: true});
res.status(300).json({
idToken: jwtBearerToken,
expiresIn: ""
})
} else {
res.sendStatus(401);
}
}
Solution 1:[1]
You want to lower case 'Request', 'Response', and 'Application'.
When i run this code:
console.log('a',express.application);
console.log('A',express.Application);
console.log('req',express.request);
console.log('Req',express.Request);
console.log('res',express.response);
console.log('Res',express.Response);
I get undefined for the 'A', 'Req', and 'Res'.
(I would have made this a comment, but I cannot leave comments.)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | shanecandoit |
