发布于 2026-01-06 1 阅读
0

node.js 项目的结构应该是什么样的?

node.js 项目的结构应该是什么样的?

介绍

本文将探讨如何以结构化的方式组织 Node.js 项目。

替代文字

有条理的项目结构可以减少错误和复杂性,提高代码的稳定性和可扩展性。

结构

|--app.js
|--api-routes
|--config
|--data
|--jobs
|--loaders
|--node_modules
|--public
|--secrets
|--services
|--views
|--package-lock.json
|--package.json
Enter fullscreen mode Exit fullscreen mode

1. app.js

app.js是 Node.js 应用程序的入口点或核心。

//app.js
const express = require('express');
const app     = express();

require('./loaders/network-information.js');
require('./api-routes/home.js')(app);
require('./jobs/say-hello.js');
var config = require('./config/config.js');

app.set('view engine', 'ejs');
app.use(express.static('public'))

app.listen(config.port, () => {
  console.log(`App listening at http://localhost:${config.port}`);
})
Enter fullscreen mode Exit fullscreen mode

2. API路由

api-routes包含 URL 端点,帮助用户与应用程序进行交互。

|--api-routes
   |--home.js
Enter fullscreen mode Exit fullscreen mode
//home.js
var analytics = require('../services/analytics.js');
module.exports = function(app, network_information){    
    app.get('/', function(req, res){
        res.render('home.ejs', {key: "You have visited this page "+analytics.visitCounter()+" times"});
    });    
}
Enter fullscreen mode Exit fullscreen mode

3. 配置

此文件夹包含用于配置应用程序参数和初始设置的文件。这些设置可以通过环境变量、命令行参数或外部资源进行覆盖和扩展。

|--config
   |--config.js
Enter fullscreen mode Exit fullscreen mode
//config.js
module.exports = {    
    port: process.env.PORT || 80
};
Enter fullscreen mode Exit fullscreen mode

4. 数据

您可以在这里存储少量数据,或者将其用作本地数据库。
注意:请勿在此处存储任何敏感或机密数据,此类数据请始终使用安全数据库。

|--data
   |--users.json
Enter fullscreen mode Exit fullscreen mode
//users.json
[
    {
        "name": "Mario Curtis",
        "city": "San Francisco",
        "contact number": "4949494949780",
        "type": "Admin"        
    }
]
Enter fullscreen mode Exit fullscreen mode

5. 工作

jobs文件夹包含一些脚本,这些脚本会在特定时间自动执行。
例如,我们创建了一个脚本,该脚本每天每小时打印一次“Hello”。

|--jobs
  |--say-hello.js
Enter fullscreen mode Exit fullscreen mode
//say-hello.js
var schedule = require('node-schedule');     

schedule.scheduleJob('00 * * * *', function(){
    console.log('Hello World, This scheduler will say "Hello" every hour to you');
});
Enter fullscreen mode Exit fullscreen mode

6. 装载机

加载器包含服务器启动时要执行的脚本类型。
例如,这里我们会在服务器启动时获取用户的IP 地址。

|--loaders
   |--network-information.js
Enter fullscreen mode Exit fullscreen mode
//network-information.js
const http = require('http');

http.get('http://api.ipify.org?format=json', (resp) => {
  let data = '';

  resp.on('data', (chunk) => {
    data += chunk;    
  });

  resp.on('end', () => {    
    console.log("Your IP address is "+JSON.parse(data).ip)
  });

}).on("error", (err) => {
  console.log("Error: " + err.message);
});
Enter fullscreen mode Exit fullscreen mode

7. 公共

public文件夹包含所有需要“静态”提供的文件(JS、CSS、图像文件)。

|--public
   |--css
   |  |--home.css
   |--js
   |  |--home.js
Enter fullscreen mode Exit fullscreen mode
//home.css
body{
    background-color: #f3f7fa;
}

div{
    text-align: center;
    padding-top: 200px;    
}
Enter fullscreen mode Exit fullscreen mode
console.log('Hello from javascript');
Enter fullscreen mode Exit fullscreen mode

8. 秘密

您可以存储与 Web 应用程序相关的所有密钥,例如API 密钥、身份验证密钥等。

|--secrets
   |--keys.json
Enter fullscreen mode Exit fullscreen mode
//keys.json
{
    "api-key": "HUH121NVYTB091BHHBCR121DR"
}
Enter fullscreen mode Exit fullscreen mode

9. 服务

服务包含一组执行特定任务的模块。它们可以重复使用。

|--services
   |--anaytics.json
Enter fullscreen mode Exit fullscreen mode
//analytics.json
var i = 0;
function visitCounter()
{
    i = i + 1;
    return i;
}

module.exports = {
    visitCounter: visitCounter
}
Enter fullscreen mode Exit fullscreen mode

10. 浏览量

它包含HTML 模板文件,这些文件随后由模板引擎“动态”渲染,并向用户提供 HTML 响应。
这里我们使用的是EJS模板引擎,您可以根据需要使用任何模板引擎(例如 Pug、EJS)。

|--views
   |--home.ejs
Enter fullscreen mode Exit fullscreen mode
//home.ejs
<html>
    <head>
        <title>Node.js Project Structure</title>
        <link rel="stylesheet" href="/css/home.css"/>
    </head>
    <body>
        <div><%= key %></div>
    </body>
    <script src="/js/home.js"></script>
</html>
Enter fullscreen mode Exit fullscreen mode

结论

组织良好的文件夹结构可以降低代码复杂度,提高应用程序的可扩展性。

您可以在GitHub上找到整个项目。

更多最新消息,请在TwitterGitHub上关注我。

文章来源:https://dev.to/kalpitrathore/what-the-node-js-project-struct-should-look-like-2noo