【问题标题】:require(filePath) not working in NodeJS in ES6 with filePath as variablerequire(filePath) 在 ES6 中的 NodeJS 中无法使用 filePath 作为变量
【发布时间】:2016-09-28 22:03:47
【问题描述】:

在使用 mongoose for MongoDB 的 NodeJS 项目时,我使用以下代码 sn-p 导入所有 mongoose 模型。

fs.readdirSync(modelsPath).forEach(function (file) {
    require(modelsPath + '/' + file);
});

这工作完美无缺。

最近,我开始从事 Rubix 项目。它包括一个带有 ES6 代码的 nodeJs 服务器(使用 babel)。

上述导入猫鼬模型的代码sn-p 不起作用。 在进一步的实验中,我发现对于require(),不允许使用变量。如果在require中写入文件路径本身,即 require('path/to/file'),它有效。但是如果我做类似的事情

var filePath = 'path/to/file';
require(filePath);

它停止工作。没有错误。它只是在启动服务器之前挂起。

我是否缺少 ES6 的任何基本内容?

编辑

以下是我要导入的模块的内容

var express = require('express'),
    router = express.Router(),
    mongoose = require('mongoose'),
    User = mongoose.models.User,
    api = {},
    auth = require('../utils/apiAuth'),
    _ = require("lodash"),
    apiResponse = require('../utils/apiResponse'),
    apiErrors = require('../utils/apiErrors'),
    config = require('../config/config'),
    bcrypt = require("bcryptjs");

// ALL
api.users = function (req, res) {
  console.log('here?');
  User.find(function(err, users) {
    if (err) {
      return apiResponse.sendError(apiErrors.APPLICATION.INTERNAL_ERROR, null, 500, req, res);
    } else {
      return apiResponse.sendResponse(users, 200, req, res);
    }
  });
};

//.... other apis ....//

router.get('/users', api.users);


module.exports = router;

它适用于我之前合作过的所有项目。 会不会和Rubix有关?

【问题讨论】:

  • 刚刚试了一个例子,确实有效。你能展示你的模块的内容吗?
  • 感谢@DrakaSAN 的及时回复。我已经用模块详细信息编辑了问题。
  • 你如何导入它,我没有看到模块中出现任何错误。您还可以减少代码以制作 MCVE,这将阻止您共享大部分代码(对我们来说很无聊,对您来说可能很危险),这是双赢的 :)
  • @DrakaSAN 是的,模块中的代码没有错误。我正在导入它,如上所述var filePath = 'path/to/file'; require(filePath);
  • @DrakaSAN 我在 Rubix 项目中实现它。我没有太多使用 ES6。还有 Rubix,一点也不!我分享的代码sn-p,我之前在几个项目中使用过,它可以工作。所以模块中肯定没有问题。看看我是否能在 Rubix 中找到任何东西。感谢您的宝贵时间。

标签: node.js ecmascript-6


【解决方案1】:

注意:太长,作为评论不切实际

这是我尝试您的代码的方式。调用/users 打印here?

main.js:

'use strict';

//Dependencies
const express = require('express'),
    app = express(),
    t = './router.js';

app.use(require(t));

app.get('*', (req, res) => {
    console.log('?');
    res.end();
});

app.listen(2219);

router.js:

'use strict';

//Export
var express = require('express'),
    router = express.Router(),
    api = {};

// ALL
api.users = function (req, res) {
    console.log('here?');
    res.end();
};

//...

router.get('/users', api.users);

//...

module.exports = router;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 2017-02-24
    • 1970-01-01
    • 2018-09-09
    • 2018-11-15
    相关资源
    最近更新 更多