创建 Express 服务时如何在 Node.js 中使用 `index.js`?
How to use `index.js` in a Node.js when creating an Express service?
您好,我正在根据 this 构建我的 Node.js 项目,如下所示:
- Root
- product name
- index.js: (contains requires for the product and the main export)
- productName.js: contains application logic
- test
- test1.js
- test2.js
...
现在我有两个问题
index.js 中逻辑上应该包含什么?目前我有这个(这是做事的好方法吗?我还可以在 index.js 中包含什么?):
// index.js
var myServer = require('./myServer.js'); // "product name" = "myServer"
module.exports = {
run: myServer.listen
}
我在 module.exports(当前 "run")中调用对象键有什么关系吗?为什么当我用$ node index.js
执行index.js时服务器总是运行 它如何自动知道运行 myServer.listen
?
P.S.: 我知道网络结构自动生成工具,我只是想了解这个建议结构的逻辑原因(index.js 中没有任何逻辑的想法)
正如您提到的,这是一项 Express 服务,如果它仅处理某些应用程序的后端,或者更具体地说,这只是后端应用程序,我建议您将 index.js 的名称更改为 server.js(因此明确声明它将处理所有服务请求)。
但如果不是,那么 index.js 也可以。
现在
1
您输入的内容绝对没问题,除此之外,您可以要求所有模块、路由(或控制器,无论您如何命名)都可以作为您应用程序的入口点。尽量不要在这里放任何逻辑。
2
实际上服务器 运行s 因为它执行名为 index.js 的文件中的脚本,脚本说 myServer.listen,现在如果你写了 console.log(" Hello World") 并使用 $ node index.js
它会打印 Hello World
而不是。
节点只是期望并执行 index.js 中的脚本,在您的情况下它是启动服务器。
关于为什么不在 index.js 中放入任何其他内容的逻辑,对我来说,我认为足够好的推理是它提供了抽象,因为它是我不希望 index.js 进入的入口点担心诸如如何处理这些数据之类的事情。我相信它应该为设置服务器提供基础。因此在某种程度上遵循单一责任。此外,除非发生一些重大变化,否则我将不必在项目生命周期内触及它,例如我决定从 express 转向其他方式。
编辑
为什么有一个名为 运行
的密钥
你似乎已经自己回答了(在评论中),你正在给出或更恰当的描述是你将一个对象附加到 module.exports 因为它是一个类似于 JSON 的对象它应该有一把钥匙(可以是任何东西,不一定 运行 它可能是 hii)。现在,如果您不想传递密钥并只导出一个 server.listen 的东西,那么您可以写成 module.exports = myServer.listen;
而不是
module.exports = {
hii: myServer.listen
}
请注意,您可以使用您的方式导出更多模块。有关 module.exports 的更多详细信息,请参阅 this 或更好的 google,因为此 link 可能随时过期,并且似乎不是理想的选择。
您好,我正在根据 this 构建我的 Node.js 项目,如下所示:
- Root
- product name
- index.js: (contains requires for the product and the main export)
- productName.js: contains application logic
- test
- test1.js
- test2.js ...
现在我有两个问题
index.js 中逻辑上应该包含什么?目前我有这个(这是做事的好方法吗?我还可以在 index.js 中包含什么?):
// index.js var myServer = require('./myServer.js'); // "product name" = "myServer" module.exports = { run: myServer.listen }
我在 module.exports(当前 "run")中调用对象键有什么关系吗?为什么当我用
$ node index.js
执行index.js时服务器总是运行 它如何自动知道运行myServer.listen
?
P.S.: 我知道网络结构自动生成工具,我只是想了解这个建议结构的逻辑原因(index.js 中没有任何逻辑的想法)
正如您提到的,这是一项 Express 服务,如果它仅处理某些应用程序的后端,或者更具体地说,这只是后端应用程序,我建议您将 index.js 的名称更改为 server.js(因此明确声明它将处理所有服务请求)。
但如果不是,那么 index.js 也可以。
现在
1
您输入的内容绝对没问题,除此之外,您可以要求所有模块、路由(或控制器,无论您如何命名)都可以作为您应用程序的入口点。尽量不要在这里放任何逻辑。
2
实际上服务器 运行s 因为它执行名为 index.js 的文件中的脚本,脚本说 myServer.listen,现在如果你写了 console.log(" Hello World") 并使用 $ node index.js
它会打印 Hello World
而不是。
节点只是期望并执行 index.js 中的脚本,在您的情况下它是启动服务器。
关于为什么不在 index.js 中放入任何其他内容的逻辑,对我来说,我认为足够好的推理是它提供了抽象,因为它是我不希望 index.js 进入的入口点担心诸如如何处理这些数据之类的事情。我相信它应该为设置服务器提供基础。因此在某种程度上遵循单一责任。此外,除非发生一些重大变化,否则我将不必在项目生命周期内触及它,例如我决定从 express 转向其他方式。
编辑 为什么有一个名为 运行
的密钥你似乎已经自己回答了(在评论中),你正在给出或更恰当的描述是你将一个对象附加到 module.exports 因为它是一个类似于 JSON 的对象它应该有一把钥匙(可以是任何东西,不一定 运行 它可能是 hii)。现在,如果您不想传递密钥并只导出一个 server.listen 的东西,那么您可以写成 module.exports = myServer.listen;
而不是
module.exports = {
hii: myServer.listen
}
请注意,您可以使用您的方式导出更多模块。有关 module.exports 的更多详细信息,请参阅 this 或更好的 google,因为此 link 可能随时过期,并且似乎不是理想的选择。