【发布时间】:2026-01-27 07:25:01
【问题描述】:
我正在 OS X 上使用 Node.js 开发应用程序,并且正在使用很多库(AWS、express、redis、Sequelize with pgSQL...)。我最近添加了使用 leveldb 的新模块(我通过 'level' 包安装了它)。模块看起来像:
var levelup = require('level');
function init(config) {
return levelup(config.level_db, {keyEncoding: 'json', valueEncoding: 'json'});
}
module.exports = {
init: init
};
如果我在主“server.js”文件中需要它,一切正常。但是当我想将调用'init'的结果分配给某个变量时,运行代码返回:
192:qubie garretraziel$ node server.js
undefined:0
TypeError: undefined is not a function
192:qubie garretraziel$
我很确定这不是某种语法错误,因为相同的代码在我的 Linux 机器上运行没有问题。如果我删除一些随机的 'require('library');' (使用适当的代码)它再次失败但后来(它开始侦听端口,但随后失败):
192:qubie garretraziel$ node server.js
App is running on port 8080
undefined:0
TypeError: undefined is not a function
192:qubie garretraziel$
当我删除足够多的“要求”时,代码就可以工作了。如果我从模块中“提取”代码并直接在 server.js 中执行“var db = levelup(config...)”,则它可以毫无问题地运行。我尝试重新安装所有模块,重新安装 Node.js 并使用 NVM 安装不同的版本,但没有任何帮助。模块可以使用多少内存或类似的东西是否有某种限制?奇怪的是,在我的 Linux 机器上它可以正常工作(并且使用 50 到 100 MB 的 RAM)。
编辑: 我的 server.js 文件如下所示:
var http = require('http');
var https = require('https');
var express = require('express');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var winston = require('winston');
var configuration = require('./configuration/configuration');
var setup = require('./lib/setup');
var bc11m = require('./lib/bc11n');
var memdb = require('./lib/memdb');
var drawdb = require('./lib/drawdb');
var models = require('./models');
var app = express();
var config = configuration[app.get('env')];
var db = models(config);
var memstore = memdb.init(config);
var drawstore = drawdb.init(config);
var server;
function runServer() {
var sessionStore = new RedisStore({client: memstore});
setup.settings(app, config, db, sessionStore);
setup.routes(app, config, db, memstore);
if (config.ssl) {
server = https.createServer(config.options, app);
} else {
server = http.createServer(app);
}
bc11m.init(server, config, db, memstore, sessionStore, drawstore);
server.listen(config.port, function () {
console.log("App is running on port " + config.port);
});
}
db.sequelize.sync().complete(function (err) {
if (err) {
winston.error('during syncing database: %s', String(err))
} else {
runServer();
}
});
那个升级模块叫做drawdb.js。此代码失败,但当我这样做时:
var drawstore = levelup(config...
它有效。或者当我删除 'require('./lib/bc11n')' 和 'require('./models')' 以及其他很少的要求时,它也可以工作。
【问题讨论】:
-
好吧,
server.js是什么样的?第一个模块的名称是什么? -
我已经用 'server.js' 代码更新了问题。
-
所以,我注意到 LevelUP 并未将 Mac 列为支持/测试的平台:github.com/rvagg/node-levelup
-
“测试和支持的平台”中有“Mac OS”...
-
@GarretRaziel 已列出,但没有关于版本等的注释,所以这让我觉得它实际上并没有得到支持和测试。
标签: javascript node.js macos memory