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

ノードがディレクトリ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() を呼び出すファイルに対して相対的です。つまり、require('./circle') で検索するには、circle.js が foo.js と同じディレクトリにある必要があります。

于 2015-08-14T01:00:33.590 に答える
3

相対パスを使用してみましたか? それらが同じディレクトリにある場合は、

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

なしで.js

于 2015-08-14T00:43:44.597 に答える