gpt4 book ai didi

javascript - NodeJS 中的导出语句

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:57 25 4
gpt4 key购买 nike

我在server.js中有以下代码

var http = require('http');

function start() {
function onRequest(request, response) {
console.log('onrequest called');
response.writeHead(200, { 'Content-type': 'text/plain' });
response.write("Hello world!");
response.end();
}

http.createServer(onRequest).listen(8888);
console.log("Server started!");
}

exports.start = start;

以及 index.js 中的以下内容

var server = require('./server');
server.start();

我不明白的是 exports.start = start; 行是如何工作的。 exports 来自哪里?为什么index.js通过server.start();调用start方法而不是exports.start()?难道 exports 只是我们放入全局命名空间中的一个变量,通过将其作为属性粘贴到全局变量 exports 上,使本地变量可以被其他模块访问吗?

救命啊!

最佳答案

Node 将每个模块包装在它自己的 IIFE 中,提供诸如 moduleexports__dirname 等参数。

所以当你写:

var http = require('http');

function start() {
function onRequest(request, response) {
console.log('onrequest called');
response.writeHead(200, { 'Content-type': 'text/plain' });
response.write("Hello world!");
response.end();
}

http.createServer(onRequest).listen(8888);
console.log("Server started!");
}

exports.start = start;

它实际上被包裹在类似的东西中:

(function(module, exports, __dirname, ...) {
var http = require('http');

function start() {
function onRequest(request, response) {
console.log('onrequest called');
response.writeHead(200, { 'Content-type': 'text/plain' });
response.write("Hello world!");
response.end();
}

http.createServer(onRequest).listen(8888);
console.log("Server started!");
}

exports.start = start;
})(module, exports, __dirname, ...)

What I'm not understanding is how the line exports.start = start; is working. Where is exports coming from?

exports 是一个对象,就像任何其他 JS 对象一样。您将在 exports.start 上附加对 start 的引用。

Why does index.js invoke the start method by server.start(); rather than exports.start()?

好问题。由于 exports 只是一个对象,因此 exports.start 不会引用任何内容,除非您通过请求模块来提供该引用。

但是,如果您的目标是没有局部变量,则可以这样做。

require('./server').start()

关于javascript - NodeJS 中的导出语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42718612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com