模块没有导出的成员“请求”

时间:2019-10-18 16:32:51

标签: javascript express

我看到有很多关于此主题的帖子,但是我没有看到与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_modulesrequest.jsresponse.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 expressLibimports是对象类型,所以我认为它们应该大写吗?

Request

非常感谢!

2 个答案:

答案 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/expresshttps://github.com/expressjs/express/blob/master/index.js

module.exports = require('./lib/express');

通过检查./lib/express,我们可以看到它以小写形式导出了requestresponseapplicationhttps://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

(我会对此发表评论,但我不能发表评论。)