1.安装生成器

npm install express-generator -g

2. 创建名称为APP的应用:

express my-project

3.安装依赖包

cd my-project

npm install

4、启动应用

npm start

5、在浏览器中使用 localhost:3000访问

  默认的端口就是3000

  更改端口:

    路径:app/bin/www

    var port = normalizePort(process.env.PORT || '3000');

6、设置请求跨域头

// app.js

app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:3000");
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header("Access-Control-Allow-Origin", "http://127.0.0.1:8080");
// res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
next();
});

注:该模板默认用的是 .jade 文件作为模板渲染 若要使用 ejs 可按照一下方法配置

1、安装 ejs

npm install ejs -S

2、在app.js中添加一下代码

var ejs = require('ejs');
app.engine('.html', ejs.__express);
app.set('view engine', 'html');

3、将view文件夹中的模板替换成  .html 文件即可(每次配置一个路由需要重新启动一下服务器)

参考文档:

https://www.jianshu.com/p/b555ba6f4067

mysql数据库配置

1、安装mysql

npm install mysql -S

2、建立对应的文件

//mysql.js
// MySQL数据库联接配置封裝
var mysql = {
host: '127.0.0.1',
user: 'root',
password: 'tll456456',
database: 'test',
port: 3306
};
module.exports = mysql;
//handel.js
/*
数据增删改查模块封装
req.query 解析GET请求中的参数 包含在路由中每个查询字符串参数属性的对象,如果没有则为{}
req.params 包含映射到指定的路线“参数”属性的对象,如果有route/user/:name,那么“name”属性可作为req.params.name
req.body通常用来解析POST请求中的数据
+req.query.id 可以将id转为整数
*/
// 引入mysql
var mysql = require('mysql');
// 引入mysql连接配置
var mysqlconfig = require('../config/mysql');
// 引入连接池配置
var poolextend = require('./poolextend');
// 引入SQL模块
var sql = require('./sql');
// 引入json模块
var json = require('./json');
// 使用连接池,提升性能
var pool = mysql.createPool(poolextend({}, mysqlconfig));
var userData = {
add: function(req, res, next) {
pool.getConnection(function(err, connection) {
var param = req.query || req.params;
connection.query(sql.insert, [param.id, param.name, param.age], function(err, result) {
if (result) {
result = 'add'
}
// 以json形式,把操作结果返回给前台页面
json(res, result);
// 释放连接
connection.release();
});
});
},
delete: function(req, res, next) {
pool.getConnection(function(err, connection) {
var id = +req.query.id;
connection.query(sql.delete, id, function(err, result) {
if (result.affectedRows > 0) {
result = 'delete';
} else {
result = undefined;
}
json(res, result);
connection.release();
});
});
},
update: function(req, res, next) {
var param = req.body;
if (param.name == null || param.age == null || param.id == null) {
json(res, undefined);
return;
}
pool.getConnection(function(err, connection) {
connection.query(sql.update, [param.name, param.age, +param.id], function(err, result) {
if (result.affectedRows > 0) {
result = 'update'
} else {
result = undefined;
}
json(res, result);
connection.release();
});
});
},
queryById: function(req, res, next) {
var id = +req.query.id;
pool.getConnection(function(err, connection) {
connection.query(sql.queryById, id, function(err, result) {
if (result != '') {
var _result = result;
result = {
result: 'select',
data: _result
}
} else {
result = undefined;
}
json(res, result);
connection.release();
});
});
},
queryAll: function(req, res, next) {
pool.getConnection(function(err, connection) {
connection.query(sql.queryAll, function(err, result) {
if (result != '') {
var _result = result;
result = {
result: 'selectall',
data: _result
}
} else {
result = undefined;
}
json(res, result);
connection.release();
});
});
}
};
module.exports = userData;
//json.js
//封装接送模块
var json = function(res, result) {
if (typeof result === 'undefined') {
res.json({
code: '1',
msg: '操作失败'
});
} else if (result === 'add') {
res.json({
code: '200',
msg: '添加成功'
});
} else if (result === 'delete') {
res.json({
code: '200',
msg: '删除成功'
});
} else if (result === 'update') {
res.json({
code: '200',
msg: '更改成功'
});
} else if (result.result != 'undefined' && result.result === 'select') {
res.json({
code: '200',
msg: '查找成功',
data: result.data
});
} else if (result.result != 'undefined' && result.result === 'selectall') {
res.json({
code: '200',
msg: '全部查找成功',
data: result.data
});
} else {
res.json(result);
}
};
module.exports = json;
//poolextent.js
// 连接池扩展封装
var poolextend = function(target, source, flag) {
for (var key in source) {
if (source.hasOwnProperty(key)) {
flag ? (target[key] = source[key]) : (target[key] === void 0 && (target[key] = source[key]));
}
}
return target;
}
module.exports = poolextend;
//sql.js
// SQL语句封裝
var user = {
insert:'INSERT INTO user(id, name, age) VALUES(?,?,?)',
update:'UPDATE user SET name=?, age=? WHERE id=?',
delete: 'DELETE FROM user WHERE id=?',
queryById: 'SELECT * FROM user WHERE id=?',
queryAll: 'SELECT * FROM user'
};
module.exports = user;
//router/index.js
var express = require('express');
var router = express.Router();
var user = require('../modules/handle');
/* GET users listing. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'SQL for MySQL' });
});
router.get('/addUser', function(req, res, next) {
user.add(req, res, next);
});
router.get('/queryAll', function(req, res, next) {
user.queryAll(req, res, next);
}); router.get('/query', function(req, res, next) {
user.queryById(req, res, next);
});
router.get('/deleteUser', function(req, res, next) {
user.delete(req, res, next);
});
router.get('/update', function(req, res, next) {
res.render('update');
});
router.post('/updateUser', function(req, res, next) {
user.update(req, res, next);
});
module.exports = router;
//index.jade
extends layout block content
h1= title
p
a(class={active: currentUrl === '/'} href='/queryAll') 数据查询 p
a(class={active: currentUrl === '/'} href='/query?id=1') 定向查询 p
a(class={active: currentUrl === '/'} href='/addUser?id=0&name=xyz&age=18') 数据插入 p
a(class={active: currentUrl === '/'} href='/update') 数据更新 p
a(class={active: currentUrl === '/'} href='/deleteUser?id=0') 数据删除
p
//layout.jade
doctype html
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
body
block content
//update.jade
extends layout
block content
h1 更新用户资料
form(method='post', action='updateUser')
div.form-row
label
span ID:
input(type='text',name='id')
div.form-row
label
span name:
input(type='text',name='name')
div.form-row
label
span age:
input(type='text',name='age')
div.form-row
input(type='submit')

nodejs脚手架express-generator的更多相关文章

  1. NodeJS 框架 Express 从 3.0升级至4.0的新特性

    NodeJS 框架 Express 从 3.0升级至4.0的新特性 [原文地址:√https://scotch.io/bar-talk/expressjs-4-0-new-features-and-u ...

  2. npm install Error:EPROTO: protocol error, symlink '../mime/cli.js' -> '/vagrant/src/nodejs/node_modules/express/node_modules/send/node_modules/.bin/mime'

    我在ubuntu上使用npm安装依赖是出现下面错误: npm ERR! Linux 3.13.0-101-genericnpm ERR! argv "/usr/bin/nodejs" ...

  3. [转] NodeJS框架express的途径映射(路由)功能及控制

    NodeJS框架express的路径映射(路由)功能及控制 我们知道Express是一个基于NodeJS的非常优秀的服务端开发框架,本篇CSSer将提供express框架的route和route co ...

  4. 阿里云主机Nginx下配置NodeJS、Express和Forever

    https://cnodejs.org/topic/5059ce39fd37ea6b2f07e1a3 AngularJS中文社区即运行在阿里云主机上,本站使用Nginx引擎,为了AngularJS,我 ...

  5. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

  6. 知名nodeJS框架Express作者宣布弃nodeJS投Go

    知名 nodeJS 框架 Express 的作者 TJ Holowaychuk 在 Twitter 发推并链接了自己的一篇文章,宣布弃 nodeJS 投 Go. 他给出的理由是:Go 语言和 Rust ...

  7. nodejs下express+ejs环境搭建

    nodejs下express+ejs环境搭建   分类: Nodejs 1.进入需要创建项目的目录    cd F:\nodeCode     2.创建一个带ejs模板工程,工程名为haha    e ...

  8. nodejs库express是如何接收inbound json请求的

    这样几行简单的代码创建一个web服务器: var express = require('express'); var app = express(); var server = require('ht ...

  9. nodejs之express静态路由、ejs

    1.静态路由与ejs使用 /** *1.安装ejs npm install ejs --save-dev * *2.express 里面使用ejs ,安装以后就可以用,不需要引入 * *3.配置exp ...

  10. 使用nodejs和express搭建http web服务

    目录 简介 使用nodejs搭建HTTP web服务 请求nodejs服务 第三方lib请求post 获取http请求的正文 Express和使用express搭建http web服务 express ...

随机推荐

  1. python 单元测试中处理用例失败的情况

    今天有一个需求, 在单元测试失败的时候打印一些日志, 我们管他叫 dosomething 吧 ,反正就是做一些操作 查了下并没有查到相关的方法, 于是研究了一波unittest 的源码 发现了这个东西 ...

  2. H5 应用程序缓存(离线缓存)

    离线缓存这个功能的实现有以下步骤: 1,以nginx做web服务器为例,在mime.types文件中添加一行:text/cache-manifest     manifest,作用是为了让服务器识别该 ...

  3. Django——12 中间件 上下文处理器 admin后台

    Django 中间件 中间件介绍 中间件的第一个例子 中间件的第二个例子 上下文处理器 admin后台管理   中间件 Django中间件(Middleware)是一个轻量级.底层的“插件”系统,可以 ...

  4. [bzoj2502]清理雪道[上下界网络流]

    bzoj状态里有两种,一种时间是个位数,一种是四位数,我就是四位数的那种,,,估计都是看了hzwer.. #include <bits/stdc++.h> #define INF 0x3f ...

  5. cogs 22. [HAOI2005] 路由选择问题

    22. [HAOI2005] 路由选择问题 ★★★   输入文件:route.in   输出文件:route.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] X城有一个 ...

  6. python 使用scapy编写DNS Fuzzer

    1. 描写叙述 使用scapy库,编写一个DNS Fuzzer工具,并測试.在这之前.先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中.且UDP的端口为53. 进入sc ...

  7. HBase编程实例

    摘要:在前文中安装了Hbase,通过Hbase shell能够进行一些操作.可是和实际的编程实例联系起来不方便,因此本文介绍有关Hbase编程的实例. 一.使用Eclipse开发HBase应用程序 1 ...

  8. 基于QT的多线程server

    // thread.cpp #include "thread.h" Thread::Thread(int socketDescriptor, QObject *parent) : ...

  9. DirectX11 学习笔记8 - 最简单的光照

    在上一个列子的基础上加了一个地面.这个地面是光照效果生成的. 看图: 先说明: 光照 须要重写一个 lightshader  就是光照的渲染器 // Define the input layout D ...

  10. TDD尝试:nodejs单元测试

    单元测试是最小化的测试方式,也是TDD的做法. TDD概念如下图: 通过测试反馈推进开发,ruby是推崇这种编程方式的. nodejs有如下常用单元测试模块 1.mocha Mocha是一个基于nod ...