【问题标题】:What is the difference between these two kind of requiring in Javascript?Javascript中这两种要求有什么区别?
【发布时间】:2020-05-14 18:37:25
【问题描述】:

在一个教程中我看到了这样的代码:

var session = require('express-session');
var FileStore = require('session-file-store')(session);

还有这样的代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

但我想我可以这样写第一个代码:

var sessionFileStore = require('session-file-store');
var FileStore = sessionFileStore.session;

第二个喜欢:

var Schema = require('mongoose')(Schema);

var Schema = require('mongoose').Schema;

我只是想问一下,这两种写法是一样的还是有区别的?

如果我对第二个命令使用类似下面的内容,我也想知道含义/区别:

var Schema = require('mongoose')('Schema');

【问题讨论】:

    标签: javascript function syntax require


    【解决方案1】:

    是一样的。 require 是一个普通函数,它返回一个值。因此,如果该值也是一个函数,您可以立即调用它,或者如果它是一个对象,则使用它的一个属性。

    但是,在第二种情况下,require('mongoose')(Schema) 会导致两个错误:

    1. 这里require返回一个对象,而不是一个函数,所以你不能调用它。
    2. 您正在使用尚未定义的变量Schema,并将其作为参数传递给函数。

    在第二种情况下,将其放在一行中的正确方法是var Schema = require('mongoose').Schema;

    在第一种情况下,我认为正确的方法是var FileStore = sessionFileStore(session); 我这里假设session 是一个全局变量,或者之前已经定义了。

    【讨论】:

    • 非常感谢!关于第一种情况,您是对的,我忘了添加var session = require('express-session'); 行。但是下一行呢?这是什么意思:var Schema = require('mongoose')('Schema');
    • 好吧,在这种情况下,您将调用require('mongoose') 返回的de 函数并将字符串Schema 作为参数传递给它,但这不应该工作。 require('mongoose') 返回一个对象,所以这样的一行会抛出一个错误(Object is not a function)。您必须使用:require('mongoose').Schema
    • 能否帮助我理解var FileStore = require('session-file-store')(session); 中的sessionvar router = express.Router() 中的Router() 之间的区别?
    • 最好再问一个问题。我很乐意为您提供帮助,所以这个问题不会因为其他问题而变得臃肿
    猜你喜欢
    • 1970-01-01
    • 2013-09-09
    • 2013-09-08
    • 2019-12-11
    • 2019-03-31
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多