0

我有文件,我认为应该将其作为模块导入,但是当我尝试导入主文件(请参阅 main.js)时,出现以下错误:

 Error: Cannot find module 'sessionStore.js'

我确保文件在正确的位置。任何想法还有什么可能导致这种情况?

main.js

var express = require('express');
var bodyParser = require('body-parser');
var util = require('util');
var toMarkdown = require('to-markdown');
var jsdiff = require('diff');
var marked = require('marked');
var pg = require('pg');
//need to get sessions to work and use server credentials instead of password
var sessionStore = require('sessionStore.js');
var PodioJS = require('podio-js').api;
var podio = new PodioJS({authType: 'password', clientId: "xxx", clientSecret: "xxx" },{sessionStore:sessionStore});

sessionStore.js

var fs = require('fs');
var path = require('path');

function get(authType, callback) {
  var fileName = path.join(__dirname, 'tmp/' + authType + '.json');
  var podioOAuth = fs.readFile(fileName, 'utf8', function(err, data) {

    // Throw error, unless it's file-not-found
    if (err && err.errno !== 2) {
        throw new Error('Reading from the sessionStore failed');
    } else if (data.length > 0) {
      callback(JSON.parse(data));
    } else {
      callback();
    }
  });
}

function set(podioOAuth, authType, callback) {
  var fileName = path.join(__dirname, 'tmp/' + authType + '.json');

  if (/server|client|password/.test(authType) === false) {
    throw new Error('Invalid authType');
  }

  fs.writeFile(fileName, JSON.stringify(podioOAuth), 'utf8', function(err) {
    if (err) {
      throw new Error('Writing in the sessionStore failed');
    }

    if (typeof callback === 'function') {
      callback();
    }
  });
}

module.exports = {
  get: get,
  set: set
};
4

2 回答 2

3

您是否尝试过使用相对路径?如果它们在同一个目录中,那么

var sessionStore = require('./sessionStore');

没有.js

于 2015-08-14T00:43:44.597 回答
3

您收到的错误是因为节点在目录中找不到您的sessionStore模块。node_modules

如果传递给 require() 的模块标识符不是本地模块,并且不以'/'、'../'或'./'开头,则 node 从当前模块的父目录开始,并添加/node_modules,并尝试从该位置加载模块。

https://nodejs.org/api/modules.html#modules_file_modules

您可能希望使用文件的相对路径。就像是:require('./sessionStore')

以“/”为前缀的模块是文件的绝对路径。例如, require('/home/marco/foo.js') 将加载 /home/marco/foo.js 中的文件。

以 './' 为前缀的模块与调用 require() 的文件相关。也就是说,circle.js 必须和 foo.js 在同一个目录下才能被 require('./circle') 找到。

于 2015-08-14T01:00:33.590 回答