节点js中的模块化编程

问题描述 投票:3回答:2

在我们的节点js应用程序中,所有api调用都在server.js中。它是一个有效的应用程序,但我不满意每个api写在一个文件,即server.js。许多与节点js应用程序相关的示例都指向在名为app.js或server.js的文件中编写服务器端调用。为了实现代码模块化,我打算将诸如employee.js(员工相关数据事务),library.js(库相关数据事务)等不同文件中的api分离到各个模块。不确定这是否是正确的方法,因为需要在应用程序调用时启动node.js服务器。因此,如果api被分发到不同的文件,那么需要一次性检查如何启动节点js服务器。

此外,我们已将node-webkit与应用程序集成在一起。

需要这方面的建议。

javascript node.js node-webkit
2个回答
1
投票

node.js中最重要的事情之一就是它的模块系统(你可以在docs中看到它:https://nodejs.org/api/modules.html),它为你提供了你想要的每个粒度选项,从千行文件到只导出文件的文件一个常数。

所以只需将文件中的代码,module.exports = thatthingyouwanttoexportrequire('./it')分解回app.js。如果你在顶级而不是在app.js中的任何回调中进行,那么它将在你的应用程序开始时完成。

很少有人抓到:

  • 所需的模块被缓存,因此要求它两次不执行你的文件两次,它可能是有用的(例如对于单身人士),但它仍然需要注意;
  • 你只导出你要导出的东西,所以没有全局变量

一个有用的模式是导出函数,它接受参数并在调用时进行初始化,如下所示:

//accum.js
var start = 0
module.exports = function initaccum(step) {
    return function accum() {
        start += step;
        return start;
    }
}

//app.js
var accum = require('./accum.js')(1);
var http = require('http')
http.createServer(function(req, res) {
    res.end(accum());
}).listen(8080);

希望这可以帮助。


1
投票

您可以使用node.js中的express中间件和默认模块系统来实现此目的。保持代码模块化和分离是一种很好的做法。一种常见的方法是为所有不同的路由/控制器(在您的情况下为员工)添加单独的文件夹

app.js

const express = require('express')
const app = express()

const employeeController = require('./controller/Employee');
const managerController = require('./controller/Manager');

app.use('/employee', employeeController);
app.use('/manager', managerController);


app.listen(3000, () => console.log('App listening on port 3000!'))

./controller/employee/index.就是

const express = require('express')
const router = express.Router()

router.get('/list', (req, res) => {
  res.send('Employee list')
});
router.get('/view', (req, res) => {
  res.send('Employee view')
});

module.exports = router

./controller/manager/index.就是

const express = require('express')
const router = express.Router()

router.get('/list', (req, res) => {
  res.send('Manager list')
});
router.get('/view', (req, res) => {
  res.send('Manager view')
});

module.exports = router

您甚至可以通过使用快速生成器来获得现成的样板MVC代码结构https://expressjs.com/en/starter/generator.html。但是我根据您的需要推荐构建您的项目。

© www.soinside.com 2019 - 2024. All rights reserved.