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. swift--如何设置子视图alpha不同于父视图

    //1.2加入商家标题评分容器 let titleWarp=UIView(frame: CGRectMake(, , screenObject.width, )); titleWarp.backgro ...

  2. BZOJ 1572 USACO 2009 Open 工作安排

    先把工作按照Deadline从小到大排序 然后按顺序取,deadline大于现在总用时就取,等于现在总用时就从前面已取的工作中找一个P最小的同它比较,取P较大的一个 用优先队列维护已取工作中P的最小值 ...

  3. hdu 5175 Misaki's Kiss again

    Misaki's Kiss again  Accepts: 75  Submissions: 593  Time Limit: 2000/1000 MS (Java/Others)  Memory L ...

  4. bug的分类和等级

    一.bug的定义 软件的bug,狭义指软件程序的漏洞或缺陷,广义指测试工程师或用户提出的软件可改进的细节.或与需求文档存在差异的功能实现等 对应三个测试目的:(3个为了) 1.为了发现程序的代码或业务 ...

  5. F - True Liars 带权并查集

    After having drifted about in a small boat for a couple of days, Akira Crusoe Maeda was finally cast ...

  6. JAVA 大数据

  7. eclipse添加插件、删除插件 示例: eclipse marketplace

    在有些版本的eclips上并没有eclipse marketplace ,这让eclipse添加插件变得比较玛法,传统的办法都是通过自行下载插件或者用 help->install new sof ...

  8. Spring发送邮件_javax.mail.AuthenticationFailedException异常已解决

    在Spring项目中须要增加监控功能.监控过程中发现异常时.须要邮件报警.最初选择用javamail发送,代码量比較大(相对于spring发送).终于选择Spring邮件发送~ 以下贴一下实现的代码以 ...

  9. 【POJ 1201】 Intervals(差分约束系统)

    [POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS   Memory Limit: ...

  10. linux openssl 编程 Client端

    相关配置等请參看上一篇关于server端文章:http://blog.csdn.net/pingd/article/details/47805349 1.Client端源代码: openssl_cli ...