由于自己不想过多的程式码挤在同一个档案中,在 stackoverflow 中查询 Node 如何 import 其他的 .js。
多半的解法不外乎就是将这些 .js export.module,然后 require 它。不过因为一些设计考量(我的变数 scope),此法不太适合我。
于是乎我看到了有人使用 eval 完成了我的需求,在当下我明知道 eval === evil 般的恐怖我还是使用了。程式码日益壮大,直到现今的除错讯息真的被 eval 阴了,请见下举例错误讯息:
ReferenceError: userInSession is not defined
at async.waterfall.getUser.uid (eval at <anonymous> (/Users/Salmon/GitHub/Bounty-Workers/serverSide/web.js:119:9), <anonymous>:88:5)
at fn (/Users/Salmon/GitHub/Bounty-Workers/node_modules/async/lib/async.js:641:34)
at Object._onImmediate (/Users/Salmon/GitHub/Bounty-Workers/node_modules/async/lib/async.js:557:34)
at processImmediate [as _immediateCallback] (timers.js:336:15)
eval at <anonymous>
正常的错误讯息都应该明确指示出呼叫的函数为何者,但只说是 eval 执行的匿名函数(anonymous function)與错误的行数,这将造成开发者大大的困扰啊 …
不晓得各位前辈有没有较好的解决方式呢?
10 回复
@JacksonTian 前辈您好,不晓得您方不方便给予我更多建议?
我举一个例子来描述,一个使用者的帐户系统,有「建立帐户、登入、修改帐户… 等」功能,我想将它们拆分成不同的档案,但都会需要最外层的 express.js 的 module (var app = require(‘express’))才可以使用,但是这些子档案没有取用参数 app 的能力,因为它们的 scope 不相同,这样子该如何处理呢?谢谢您!
@dayuoba 您好,大概就是这样子
var .... (其他的庫)
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send();
});
app.get('/create', function(req, res) {
res.send();
});
app.get('/login', function(req, res) {
res.send();
});
var router = require('./router.js');
router(application);
//router.js
module.exports = function(application) {
var expressApp = application.expressApp;
var otherModules = application.otherMoudles;
expressApp.get('/', function(req, res) {
//use ohtersModules here
//res.render()
});
};
不知道是不是想要这种。。
@dayuoba 看起来真棒,请问是这样的 application 吗?
var application = {};
application. ... = 其他的庫;
application.express = require('express');
application.expressApp = express();