nodejs写服务端,问如何将这些接口分开写在不同的文件内,最后将所有的接口文件引入到一个主文件内

接触nodejs时间不多,使用nodejs写服务端,我现在把所有接口都写在一个文件里面,请问如何将这些接口分开写在不同的文件内,最后将所有的接口文件引入到一个主文件内

我现在所有的接口都类似下面的代码

app.all('/application/message/insert', (req, res) => {
    let insertSql = "INSERT INTO application_message SET ?"; //查询用户表的ID
    let loginUserInfo = {
        "uid": 0
    };

    let param = req.body;
    let selectParams = {
        title: param.title,
        userID: 0,
        content: param.content,
        position: param.position,
        salary: param.salary,
        type: param.type,
        dateline: getCurrentDate(2),
        workPlace: param.workPlace
    };

    if (req.session.loginUserInfo !== undefined) {

        loginUserInfo = req.session.loginUserInfo;

        selectParams["userID"] = loginUserInfo["uid"];
        pool.getConnection( (err, connection) => {
            if (err) {
                throw err;
            } else {
                connection.query(
                    insertSql,
                    selectParams,
                    (err,data) => {
                        if(err) {
                            throw err;
                        } else {

                            res.json({
                                "function": "insert",
                                "message": "success",
                                "detail": "求职信息发布"
                            })
                        }
                    }
                )
            }
            pool.releaseConnection(connection);
        });

    } else {
        res.json({
            "function": "insert",
            "message": "fail",
            "detail": "求职信息发布"
        })
    }
});

/**
 * 查询求职信息
 */
app.all("/application/message/select", (req, res) => {
    let selectSql = "SELECT id, title, content, dateline, userID, a.position, a.salary, a.type, workPlace, u.name as author, u.sex as sex from application_message a, user_information u where a.userID = u.uid and id=? limit 0,1"; //查询用户表的ID

    // let id = req.query.id;

    let id = req.body.id;

    // console.log("uid ==", uid);

    // console.log("开始插入招聘信息");

    let returnData = {
        code: "",
        message: "",
        data: ""
    };
    pool.getConnection( (err, connection) => {
        if (err) {
            throw err;
        } else {
            connection.query(
                selectSql,
                [id],
                function (err, rows) {
                    //console.log(result);
                    //res.json(result);

                    if (err) {
                        throw err;
                    } else {
                        // console.log("loginUserInfo ==", loginUserInfo);
                        returnData["code"] = "0001";
                        returnData["message"] = "success";
                        returnData["data"] = rows;
                        res.json(returnData);
                    }
                    // connection.release();
                }
            )
        }
        pool.releaseConnection(connection);
    })

});
阅读 6k
5 个回答
// a.js,可以写多个接口
const app = require('express').Router();
app.get(...);
...
module.exports=app;

// b.js
const app = require('express').Router();
app.all(...);
...
module.exports=app;

app.js文件里面require a.js,b.js,分配不同的路由
const a=require('a');
const b=require('b');

app.use('/a',a);
app.use('/b',b);

我正在使用的做法:

const fs = require('fs')
const files = fs.readdirSync(__dirname)
const route = require('express').Router()
for (let file of files) {
  if (file === 'index.js') {
    continue
  }
  if (file.indexOf('!') > -1) continue
  route.use('/comm', require('./' + file))
}
module.exports = route

其实方式就是将路由做封装,再通过统一入口文件index.js合并,最终只需导入入口文件。
暂时屏蔽的路由可以在命名中添加!

// a.js
module.exports = function(req,res,next) {
 // 逻辑代码
}
// app.js
const routeA = require('./a');

app.use('/a',routeA);

告诉你个好东西 glob。一个文件全搞定,不需要手动 require
index.js

const compose = require('koa-compose')
const glob = require('glob')
const { resolve } = require('path')

registerRouter = () => {
    let routers = [];
    glob.sync(resolve(__dirname, './', '**/*.js'))
        .filter(value => (value.indexOf('index.js') === -1))
        .map(router => {
            routers.push(require(router).routes())
            routers.push(require(router).allowedMethods())
        })
    return compose(routers)
}

module.exports = registerRouter

这段代码的意思是整合所有的路由文件。
在 app.js里 app.use(registerRouter());就可以了
至于你的路由文件随便写随便命名,记得module.exports就好了。不需要每次写一个路由文件就手动require

index.js就是利用glob,自动循环require当前目录的所有路由文件,整合,导出。
在app.js里import这个index.js。app.use就可以了。
clipboard.png

const express = require('express');
const application = require('./routes/application'); // 招聘职位信息
const user = require('./routes/user'); // 用户信息管理
const shortMessage = require('./routes/short_message'); // 请求短信接口

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({extended:true})); // for parsing application/x-www-form-urlencoded
app.use('/application',application);
app.use('/user',user);
app.use('/shortMessage',shortMessage);

const server = app.listen(3090, function () {
    let host = server.address().address;
    let port = server.address().port;
    console.log('heart web listening at http://%s:%s', host, port);
});

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题