首先,可以通过npm或者淘宝镜像cnpm全局安装epress框架,这里不具体说了

npm install -g express
npm install -g express-generator

新建一个项目
express -e xxx

目录说明:

bin:项目的启动文件,也可以放其他脚本。

node_modules:用来存放项目的依赖库。

public:用来存放静态文件(css,js,img)。

routes:路由控制器。

views:视图目录(相当于MVC中的V)。

app.js:项目入口及程序启动文件。

package.json:包描述文件及开发者信息。

-----------------------------------------------其他,自己创建使用------------------------------

actions:控制器,对请求的操作(相当于MVC中的C)。

plugs:数据库操作、邮件帮助等文件。

config:配置目录。

Dockerfile:做自动化部署的配置文件。

.gitignore:上传git的忽略文件配置。

README.md:项目说明文件。

app.js文件:

 /**
* 应用程序的入口文件
*/
//加载express模块
const express = require('express');
const bodyParser = require('body-parser');
const http = require('http');
const path = require('path');
const cookieParser = require('cookie-parser');
const api = require('./routes/api');
const logConfig = require('./logs/logconfig/logconfig');
const requestLogger = logConfig.getLogger();//根据需要获取logger
const loginFlag = require('./routes/checklogin');
const app = express();
//设置跨域访问
app.all('*', function (req, res, next) {
if(req.headers.origin) {
res.header("Access-Control-Allow-Origin", `${req.headers.origin}`);
} else {
res.header("Access-Control-Allow-Origin", `*`);
}
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,x-access-token, x-access-site");
res.header("Access-Control-Expose-Headers", "*");
if(req.method === "OPTIONS") {
return res.end();
}
next();
});
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
logConfig.useLogger(app, requestLogger);
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({ limit: '50mb',extended: true }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); //MARK: 健康检查
app.get('/healthz', (req, res) => {
res.status(200).send({
error: false,
result: 'healthz working'
})
}); // //先检查是否登录
app.use('/api', (req, res, next) => {
loginFlag.authentication(req, res, next);
}) app.use('/api', api); // catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
}); // error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page
res.status(err.status || 500);
res.send('error');
});
module.exports = app;

routes部分重要代码:

 const express = require('express');
const router = express.Router();
const Home=require('../action/home/home'); router.get('/v2/home/getactions',Home.GetActions);
router.post('/v2/home/deleteaction',Home.DeleteAction);
router.post('/v2/home/operationactions',Home.OperationActions); module.exports = router;

actions部分重要代码:

 const pSqlClientExecute = require('../../plugs/postgresqldb');
const Util = require('../../utils/utils');
const fs = require("fs");
const util = require("util");
const ejsexcel = require('../../download/ejsexcel');
const readFileAsync = util.promisify(fs.readFile);
const writeFileAsync = util.promisify(fs.writeFile);
const Home = {}; Home.GetBIChartsData = (req, res, next) => {
console.log('fatppis call api {/v2/home/getbichartsdata}')
let { DateTime,Shift_ID, Area,CustomerFamily_ID,OrderBy} = req.query;
if(CustomerFamily_ID==null||CustomerFamily_ID==undefined){
CustomerFamily_ID='';
}
let databaseFn = async function() {
let sqlList = `SELECT * FROM "sp_FOP_GetBIChartsData"('${DateTime}',${Shift_ID},'${Area}','${CustomerFamily_ID}','${OrderBy}')`;
let sqlListFn = await pSqlClientExecute(req,sqlList, []);
return sqlListFn;
}
databaseFn().then((data) => {
res.send({
status: 200,
data: data
});
})
.catch((error) => {
res.status(400).json({
msg: error.detail||error.message
})
});
}

package.json文件

 {
"name": "server",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node ./bin/www"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.2",
"cookie-parser": "~1.4.3",
"cookies": "^0.7.1",
"express": "^4.16.3",
"express-session": "^1.15.6",
"node-rest-client": "^3.1.0",
"path": "^0.12.7",
"pg": "^7.4.1",
"log4js": "^3.0.6"
}
}

项目源码链接:https://github.com/ZhijianPu/nodejsapidemo.git

NodeJS express框架的使用的更多相关文章

  1. React第一篇: 搭建React + nodejs + express框架

    前提: 需要安装Node.js (>6)版本 1.cmd进到本地某个目录, 逐行输入以下指令(以下括号为注释) npm install -g create-react-app   (全局安装cr ...

  2. nodejs express 框架解密1-总体结构

    本文是基于express3.4.6的. 1.express 代码结构为: bin/express 是在命令行下的生成express 框架目录文件用的 lib/express 是框架的入口文件 lib/ ...

  3. nodeJS express框架 中文乱码解决办法

    最近在研究javascript 的服务端应用 node,之所以想要研究node,是因为前几个月一直在前端挣扎,从javascript入门到在项目中实际使用javascript,确实感悟颇深.javas ...

  4. nodejs express 框架 上传文件

    web 项目应用express4.0框架 html 表单post 文件上传失败,后端无法获取提交文件 express不支持文件上传. 方式一 若是图片,可以将图片转码为BASE64上传 前端框架ang ...

  5. 安装nodejs express框架时express命令行无效

    我也是看了这篇才明白.http://jingyan.baidu.com/article/922554468a3466851648f419.html 最近在看一本书,nodejs开发指南.至于出现这个问 ...

  6. Centos 编译安装nodejs&express框架

    一. 下载nodejs 版本 wget http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz 二. 编译安装 cp node-v0.10.28.ta ...

  7. nodejs express 框架解密5-视图

    本文档是基于express 3.4.6 的 在我们的代码中,渲染模板大致是这样写的 exports.index = function(req, res){ res.render('index', { ...

  8. nodejs express 框架解密4-路由

    本文档是基于express3.4.6 express 的路由是自己去实现的,没有使用connect中的路由中间件模块. 1.在如何创建一个app那篇中,我们提到了路由, //router //路由 t ...

  9. nodejs express 框架解密3-中间件模块

    本文档是基于express 3.4.6 的 在上篇中我们提到了中间件,这篇主要解释这个模块,middleware.js 为: var utils = require('./utils'); /** * ...

随机推荐

  1. OS X的CAOpenGLLayer中如何启用OpenGL3.2 core profile

    在OS X的openGL编程中,我们有时为了想在自己的OpenGL图层上再加些自己的某些涂层,必须得用CAOpenGLLayer而不是NSOpenGLView,由于在NSOpenGLView上添加任何 ...

  2. 监控查询慢sql

    mysql:--查询慢sql:业务db用户 select b.time, b.host, b.id, b.state, b.user, b.db, b.info  from information_s ...

  3. 停止monkey的方法

    注意 Monkey启动后会不断地向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止.在Monkey运行过程中,即便断开 与PC的连接,Monkey依然可以在手机上继续运行. 停止Monke ...

  4. c# 子窗体居中父窗体

    1.设置CenterParent不管用.只好用代码控制. frmRunning_ = new FrmRunning(); frmRunning_.StartPosition = FormStartPo ...

  5. linux下jdk环境的搭建

    1.jdk的下载 2.linux centos7.2  64位下的安装和环境变量配置 1.jdk的下载 下载地址:https://www.oracle.com/technetwork/java/jav ...

  6. utgard OPC 主要功能简介

    度娘还行,尽管不好用,但所有的开发人员不懈努力地写博客,能得到很多东西! 这里向所有未谋面的博主们致敬! 搜了一堆OPC资料,在这里整理一下,用一个封装类来说明utgard的主要接口.使用了java自 ...

  7. glew, glee与 gl, glu, glut, glx, glext的区别和关系

    GLEW是一个跨平台的C++扩展库,基于OpenGL图形接口.使用OpenGL的朋友都知道,window目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些Open ...

  8. C语言字符串之无重复字符的最长子串

    题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 输入: " ...

  9. Hackergame2019 web

    前几天跟着几个大佬一起看了看中科大的Hackergame2019,这个比赛主要针对的是新手,激发新生对CTF比赛的兴趣,虽然我已经大三了,但实在是因为我过于five,也只能帮大佬打打杂,这里把自己做的 ...

  10. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...