【问题标题】:Node JS Error: Cannot find module './services'节点 JS 错误:找不到模块 './services'
【发布时间】:2019-12-24 20:45:26
【问题描述】:

我正在尝试使用 sinon 创建存根来运行测试,但它会抛出错误。 它试图找到一个模块服务并说该模块未找到,但我将 services.js 与测试放在同一文件夹中。所以我不确定它为什么会失败。 谁能告诉我代码有什么问题。

 1) the car-lookup controller "before each" hook for "should return filtered TAP response":
     Error: Cannot find module './services' from 'C:\nodejsworkspace\olive\server\api\car-lookup'
      at Function.module.exports [as sync] (node_modules\proxyquire\node_modules\resolve\lib\sync.js:40:15)
      at Proxyquire._resolveModule (node_modules\proxyquire\lib\proxyquire.js:137:20)
      at Proxyquire.<anonymous> (node_modules\proxyquire\lib\proxyquire.js:205:35)
      at Array.reduce (<anonymous>)
      at Proxyquire._withoutCache (node_modules\proxyquire\lib\proxyquire.js:204:6)
      at Proxyquire.load (node_modules\proxyquire\lib\proxyquire.js:129:15)
      at Context.<anonymous> (test\unit\server\api\car-lookup\car-lookup.controller.test.js:30:18)

    controller = proxyquire('../../../../../server/api/car-lookup/car-lookup.controller.js', {
      './services': { taClient: new MockTaClient() }
    });
  });


以下是我认为从 car-lookup.controller.js 导出服务的方式

下面是汽车查找控制器.js
如果您在第一行看到它正在尝试导入服务并且服务不是直接的 js 文件。我在 ../../ 目录中有一个 index.js 文件,这就是第一行所指的内容。目录结构也在下面。请指教。

>server
  > api
    > car-lookup
      >car-lookup.controller.js

>server 
 >services 
   >index.js
'use strict';
const services = require('../../services');
const { ApiError, ValidationError } = require('../../errors');
const AccountModel = require('../../models/account-model');

const lookupAccount = (req, res, next) => {

  const retrieveAccount = (oktaToken) => { 
    return services.tapClient.retrieveAccount(req.body);
  };



  const sendResponse = (account) => {
    res.send(new AccountModel(account));
  };

  const onError = (err) => {
    next(err instanceof ValidationError ?
      new ApiError(err, 400) :
      err);
  };

  retrive()
    .then(retrieveAccount)
    .then(sendResponse)
    .catch(onError);
};

module.exports = {
  lookupAccount
};

【问题讨论】:

  • 你的反斜杠目录导航可以使用nodejs.org/docs/latest/api/modules.html#modules_dirname和NodeJS内置的Path函数nodejs.org/docs/latest/api/path.html来简化
  • 您能否提供exporting 和importing 服务文件。
  • 嗨,@ambianBeing 我已经更新了关于如何导入模块的问题。请检查一下。
  • @Jackson2489 您已经解决了问题本身。你不能要求目录,不应该是require('../../services/index.js');
  • @ambianBeing 即使我使用它,我也会遇到同样的错误。 ```找不到模块../../services/index.js ```

标签: node.js proxyquire


【解决方案1】:

确保您正在正确导出文件服务

【讨论】:

  • 您好,William,我更新了关于如何导入模块的问题。请检查一下。
猜你喜欢
  • 2014-05-13
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 2019-11-05
  • 2021-07-03
  • 2019-12-18
相关资源
最近更新 更多