我看到有很多关于此主题的帖子,但是我没有看到与Express和我的特定问题相关的任何信息,
import * as express from 'express';
import { Request, Response, Application } from 'express'; // <-- Error here
给我一个错误({{1},Module has no imported member
和'Request'
的{{1}}。
我看到在'Response'
的子目录'Application')
中列出了文件node_modules
,request.js
和response.js
。基于错误跟踪,我猜测Express不会检查application.js
子目录。使用/lib
时,如何强制/引导系统检入/lib
子目录? (或者这不是问题,而又是另一个问题?)。
我尝试了/lib
,然后尝试import
,然后尝试了import { Request, Response, Application } from 'express/lib'
,但是都没有用。
=====================================
注意:我在import * as expressLib from 'express/lib
下有以下代码。 。 。因为import {Request, Response, Application } from expressLib
和imports
是对象类型,所以我认为它们应该大写吗?
Request
非常感谢!
答案 0 :(得分:1)
已更新:我没有意识到您使用打字稿,请忽略原始答案。
使用打字稿,如果您安装了@types/express,则大写的导入应该可以工作-因为此软件包会导出大写的类型:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/express/index.d.ts#L86
可能在重新启动之前没有以某种方式索引类型包。这是我考虑到问题已解决的唯一猜测。
=====================================
导入模块时-加载为main的文件是package.json
。如果main
中没有package.json
文件,那么将从模块根目录加载index.js
。
如果是Express,则没有main
文件,并且index.js
加载了./lib/express
:
https://github.com/expressjs/express/blob/master/index.js
module.exports = require('./lib/express');
通过检查./lib/express
,我们可以看到它以小写形式导出了request
,response
和application
:
https://github.com/expressjs/express/blob/master/lib/express.js#L59:
/**
* Expose the prototypes.
*/
exports.application = proto;
exports.request = req;
exports.response = res;
因此,要导入它们,您应该使用小写字母:
import { response, request, application } from 'express';
答案 1 :(得分:1)
您要小写“请求”,“响应”和“应用程序”。
当我运行此代码时:
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);
对于“ A”,“ Req”和“ Res”,我得到undefined
。
(我会对此发表评论,但我不能发表评论。)