【问题标题】:How can I split server.js in the right way?如何以正确的方式拆分 server.js?
【发布时间】:2019-11-24 03:50:39
【问题描述】:

我正在编写自己的应用程序(后端和前端)。我想问你们我是否以正确的方式做这件事。 我想将 server.js 拆分为几个文件(在 PHP 中我会使用 include()),但我不确定这是否正确。

下面是一些代码示例:

const app = require('express')(),
    fs = require('fs'),
    http = require('http').Server(app),
    io = require('socket.io')(https),
    path = require('path'),
    login_user = require('./routes/login_user'),
    add_user = require('./routes/add_user'),
    logout = require('./routes/logout');


app.post('/login_user', (req, res, next) => {
    login_user.go(req, res, next);
});

app.post('/add_user', (req, res) => {
    add_user.go(req, res);
});

app.get('/logout', (req, res) => {
    logout.go(req, res);
});

请注意,这不是全部代码,我想专注于将“路由”或“路径”拆分为几个文件。例如,整个 API 登录系统位于 /routes/login_user.js 文件中(已导出)。

现在我有这么多路径,代码看起来有点奇怪。

app.post('/check_balance', (req, res) => {
    check_balance.go(req, res);
});

app.post('/add_incoming', (req, res) => {
    add_incoming.go(req, res);
});

app.post('/add_outgoing', (req, res) => {
    add_outgoing.go(req, res);
});

app.post('/add_category', (req, res) => {
    add_category.go(req, res);
});

app.post('/change_settings', (req, res) => {
    change_settings.go(req, res);
});

app.post('/login_user', (req, res, next) => {
    login_user.go(req, res, next);
});

app.post('/add_user', (req, res) => {
    add_user.go(req, res);
});

app.post('/verify_user', (req, res) => {
    verify_user.go(req, res);
});

app.get('/logout', (req, res) => {
    logout.go(req, res);
});

app.get('/check_settings', (req, res) => {
    check_settings.go(req, res);
});

app.get('/check_categories', (req, res) => {
    check_categories.go(req, res);
});

app.post('/remove_categories', (req, res) => {
    remove_categories.go(req, res);
});

app.get('/check_incomings', (req, res) => {
    check_incomings.go(req, res);
});

app.get('/check_outgoings', (req, res) => {
    check_outgoings.go(req, res);
});

app.get('/check_both', (req, res) => {
    check_both.go(req, res);
});

app.get('/check_outgoings_chart', (req, res) => {
    check_outgoings_chart.go(req, res);
});

app.get('/check_incomings_chart', (req, res) => {
    check_incomings_chart.go(req, res);
});

app.post('/remove_incomings', (req, res) => {
    remove_incomings.go(req, res);
});

app.post('/remove_outgoings', (req, res) => {
    remove_outgoings.go(req, res);
});

【问题讨论】:

标签: javascript node.js


【解决方案1】:

使您的 server.js 尽可能简单,并将所有路由逻辑提取到单独的文件夹(可能将其命名为“路由”)。如果您还想定义自己的架构,请将其放在单独的文件夹(“模型”)中。一个完整的解决方案可以是这样的:

在模型文件夹中: 用户.js

const mongoose = require("mongoose"); // In case if you want to use MongoDB
const userSchema = new mongoose.Schema({
  name: { type: String, required:true },
  email: { type: String, required: true },
  password: { type: String, required: true },

});
exports.User = User;

在路线文件夹中: users.js

const { User } = require("../models/user");
const router = express.Router();

//define your routes here
router.get('/', async(req,res)=>{
  const users = await User.find();
res.send(users)
});
module.exports = router;

最后在你的 server.js 中

const app = require('express')(),
    fs = require('fs'),
    http = require('http').Server(app),
    io = require('socket.io')(https),
    path = require('path'),
    users = require('./routes/users');

app.use("/api/users", users);  //With this API Endpoint you can access it like http://{your_domain}/api/users

如果你想让它更干净,你可以将所有路由路径包装到另一个文件夹。让我们称之为“启动”。 有了这个,你就可以这样做了。

在您的启动文件夹中:

routes.js

const users = require("../routes/users");

module.exports = function(app) {
app.use("/api/users", users);
//add all routes here
}

然后在你的 server.js 中

require("./startup/routes")(app); //all routes will be imported

【讨论】:

    【解决方案2】:

    我认为this 是您所需要的。

    假设有一个名为routers/login.js的文件:

    var express = require('express');
    var router = express.Router();
    
    router.get('/login', function(req, res) {
      // do something  
    });
    

    然后app.js:

    ...
    var login = require('./routes/login');
    app.use("/login", login)
    
    

    【讨论】:

      【解决方案3】:

      将所有路由文件放在一个文件夹中,该文件夹包含多个文件,如User_routes.js 可以包含与用户相关的路由等。

      您还需要使用module.export.your_module 从每个文件中导出这些路由,并将它们包含在您的服务器文件中,就像在用户路由中一样:

      // Login Page 
      router.get('/login', (req, res) => res.render('login'));
      
      // Register Page 
      router.get('/register',(req, res) => {  
      res.render('register'); });
      

      然后将其导入为

      module.exports = router;
      

      也包括它:

      app.use('/users', require('./routes/users.js'));
      
      app.use('/',(req,res,next)=>{
        console.log('I should handle it Now.');
      res.render('404');
      });
      

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        相关资源
        最近更新 更多