Javascript 拆分express和app是否有任何目的?

Javascript 拆分express和app是否有任何目的?,javascript,node.js,express,Javascript,Node.js,Express,我在(每个?)Express应用程序中看到这两行 const express = require('express'); const app = express(); 我想知道是否有任何参数可以传递到express() 在这里检查,没有看到任何 为什么有些方法在express()上,有些方法在app()上 它们似乎应该组合在一起,并在一个对象上拥有所有方法。不接受任何参数。调用它的目的是创建应用程序对象,因此,即使没有参数,也必须调用它 您经常看到的另一种书写方式是: const app =

我在(每个?)Express应用程序中看到这两行

const express = require('express');
const app = express();
我想知道是否有任何参数可以传递到
express()

在这里检查,没有看到任何

为什么有些方法在express()上,有些方法在app()上

它们似乎应该组合在一起,并在一个对象上拥有所有方法。

不接受任何参数。调用它的目的是创建应用程序对象,因此,即使没有参数,也必须调用它

您经常看到的另一种书写方式是:

const app = require("express")();
不过,在使用ESM时,它需要再次分离

import express from "express"; // Or similar

const app = express();

你在评论中说:

例如,在不创建应用程序的情况下,我能做些什么有用的事情吗?有什么我只能用快车做的吗

据我所知,您必须至少创建一个应用程序对象才能使用Express执行任何有用的操作。请注意,您不必只创建一个应用程序。这是典型的用例,但没有理由不能创建多个在不同端口上运行的应用程序

您可能想知道为什么express不能直接从
require
提供应用程序对象。原因是模块只加载一次并缓存,因此您从
require
获得的内容是共享的。因此Express导出用于创建应用程序对象的
Express
函数。

不接受任何参数,不接受。调用它的目的是创建应用程序对象,因此即使没有参数,也必须调用它

您经常看到的另一种书写方式是:

const app = require("express")();
不过,在使用ESM时,它需要再次分离

import express from "express"; // Or similar

const app = express();

你在评论中说:

例如,在不创建应用程序的情况下,我能做些什么有用的事情吗?有什么我只能用快车做的吗

据我所知,您必须至少创建一个应用程序对象才能使用Express执行任何有用的操作。请注意,您不必只创建一个应用程序。这是典型的用例,但没有理由不能创建多个在不同端口上运行的应用程序

您可能想知道为什么express不能直接从
require
提供应用程序对象。原因是模块只加载一次并缓存,因此您从
require
获得的内容是共享的。因此Express导出
Express
函数,您可以使用该函数创建应用程序对象(如果需要多个对象,可以使用多个对象)

有什么我只能用快车做的吗

这样做两行的原因是:

const express = require('express');
const app = express();
与此相反:

const app = require('express')();
是指
express
模块上有时需要的功能,例如:

express.static(...)               // middleware for serving static files
express.json(...)                 // middleware for parsing json requests
express.urlencoded(...)           // middleware for parsing urlencoded requests
express.Router(...)               // constructor for a new Router object
有什么我只能用快车做的吗

这样做两行的原因是:

const express = require('express');
const app = express();
与此相反:

const app = require('express')();
是指
express
模块上有时需要的功能,例如:

express.static(...)               // middleware for serving static files
express.json(...)                 // middleware for parsing json requests
express.urlencoded(...)           // middleware for parsing urlencoded requests
express.Router(...)               // constructor for a new Router object

当所有这些都失败时,-扰流板警报,它不需要任何其他参数。我不太确定问题是什么,因为express对象当然有用途,你可以用它来设置所有路由、启动服务器等。我的问题用词不对。express和app上都有方法。像这样的代码,你必须使用这两行对我来说似乎很奇怪。例如,在不创建应用程序的情况下,我能做些什么有用的事情吗?有什么我只能用express做的吗?@J.M.-我已经更新了我的答案,试图解决这个问题。当所有其他方法都失败时,-剧透警报,它不需要任何其他参数。我不太确定问题是什么,因为express对象当然有用途,你可以用它来设置所有路由、启动服务器等。我的问题用词不对。express和app上都有方法。像这样的代码,你必须使用这两行对我来说似乎很奇怪。例如,在不创建应用程序的情况下,我能做些什么有用的事情吗?有什么我只能用express做的吗?@J.M.-我已经更新了我的答案,试图解决这个问题。ESM代表什么?@J.M.ES6模块。@J.M.-正如str所说,但这个链接指向Node.js文档中关于使用它们的内容(因为你使用的是Node.js)。ESM代表什么?@J.M.ES6模块。@J.M.-正如str所说,但是这个链接指向Node.js文档中关于使用它们的内容(因为您使用的是Node.js)。@j.m.-这似乎解决了您真正想问的问题。是吗?@j.m.-这似乎解决了你真正想问的问题。是这样吗?