express4上传文件
㈠ 请教Express 4 中如何使用connect-mongo
简单的介绍下node+express+mongodb这三个东西。
node:是运行在服务器端的程序语言,表面上看过去就是javascript一样的东西,但是呢,确实就是服务器语言,个人觉得在一定层次上比c灵活,java就不提了。反正你只要认为node可以干很多事就行了,绝对不只是web开发。
express:这货呢,就是node的一种框架,node有很多的开源框架,express是一个大神开发的(这尊神已经移驾到go语言的开发去了)。express可以让你更方便的操作node(因为原生的node写起来比较麻烦,而且因为node是事件驱动的,所以有很多异步回调,写多了就看着晕...)
mongodb:这是一种非关系数据库(nosql),太深的东西我也不清楚,反正这货也有很强大的地方,缺点就是不适合数据一致性要求高的比如金融方面的开发。但是优点就快。
总结:也就是说node和mongodb组合起来特别适合一个应用场景——速度快,处理量大的情况。
下面先说说准备工作:(以windows8.1系统环境为例)
1.node:先下载安装nodejs,下载地址http://www.nodejs.org/,安装好了之后检查是否在系统环境变量里自动配置好了path,如果没有,请把node的安装地址配置到path里去。然后在cmd里敲入node,如果可以,那么这一步ok了,很简单吧。
2.express:这个安装分两种,一种是全局安装,一种是本地安装。网络上说的玄乎玄乎的,但是实际操作中你会发现不同的系统环境会出现问题,比如win8.1中文用户名情况下,你得改变npm的全局路径(npm是node模块包管理程序,在你安装好node的时候已经自带npm了),操作:
prefix = 自定义模块目录
cache = 自定义缓存目录
接着安装express(新版本4.X以上要安装express-generator)
npm i -g express(旧版本npm i -g express+版本号)
npm i -g express-generator
(如果想本地安装在和npm同一个目录下,先cd到node_moles目录,再使用npm i express-generator命令,然后再将node_moles目录下的./bin配置到环境变量path里去)
测试:
express -V 成功的话会显示版本号
3.mongodb:这个数据库安装很简单,下载地址http://www.mongodb.org/。安装好了,就在cmd里cd到mongodb安装目录下的bin目录,然后敲命令:
mongod --dbpath="mongodb安装目录\data" --logpath="mongodb安装目录\log\log.txt" --install --serviceName MongoDB --serviceDisplayName MongoDB
操作完,你会发现,你的电脑的服务里多了一个MongoDB服务,没错,就是它,然后你运行这个服务就行了。
正题:搭建简单的node+express+mongodb项目
先在cmd控制台里cd到一个目录下面,记住这你的workspace,然后是用是用express创建一个app项目
express hello-world -e (-e表示支持ejs模板引擎,默认是jaden。什么事模板引擎,比如jsp...太深的我也不懂。本人比较擅长html原生的东西,像这种模板引擎我也是第一次使用,也蛮方便的哦,不过在我看来,没啥用, 我不需要,但是可能你需要...)
然后我们再下载依赖包
npm i (这样就会自动将项目需要的依赖moles安装到项目的moles里去了)
我们cd到hello-world目录下,是用命令
npm start 启动项目(也可以是node ./bin/www,旧版本直接node app.js,因为具体要看package.json里的启动配置了)
我们可以在浏览器地址栏里敲入 http://127.0.0.1:3000/ 这就是你的第一个express创建的node app。
是不是很哈皮。。。
我们研究下express创建项目
你需要了解的项目主要目录为:routes和views,你最好再在项目里新建一个目录叫models(作用后面讲)
routes里index.js配置的都是get和post请求的路径映射关系,很简单的哦。
views里index.ejs就相当于一个html文件,里面就是一些html标签和<%%>标签,感觉和jsp差不多哦。
看起来不错的样子,标准的MVC框架(models里放模型,views里面放展示,routes里面放控制)
上面我们已经生成好了app原型,接着我们设计数据库
cmd命令行里:
mongo //进入数据库
use hello-world //创建项目数据库
db.addUser("shuaige", "123456") //给这个数据库创建了一个叫帅哥的账号,密码123456 (但是我觉得可能我理解的不到位,你也可以不做这个操作)
然后,我们就为这个hello-world数据库创建collection(collection就相当于oracle和mysql里的table)
db.createCollection("users") //创建一个集合,也就是表
db.users.insert({userid: "admin", password: "123456"}) //给users里添加一个文档,也就是一条记录账号admin,密码123456
ok,现在检查一下:
db.users.find() //如果看到你刚刚添加的文档记录,就ok咯
好简单的数据库集合以及文档设置好,我们就回到express创建的node项目里,我们需要:
在models下创建一个user.js,作为实体类映射数据库的users集合
在views下做几个页面(可以用ejs也可以用html,我就用ejs吧)
在routes下的index.js配置路由,也就是请求映射处理
1在models下创建一个user.js,作为实体类映射数据库的users集合
user.js
?
1
2
3
4
5
6
7
var mongoose = require("mongoose"); // 顶会议用户组件
var Schema = mongoose.Schema; // 创建模型
var userScheMa = new Schema({
userid: String,
password: String
}); // 定义了一个新的模型,但是此模式还未和users集合有关联
exports.user = mongoose.model('users', userScheMa); // 与users集合关联
2在views下面建index.ejs, errors.ejs, login.ejs, logout.ejs, homepage.ejs。 (index是自带的,不用建)
㈡ Express框架进阶4---安全(转)
以下内容基本与express中国网站 生产环境最佳实践:安全 一致
旧版本将不在维护,可能存在已知的漏洞
2-1 . 如果应用程序处理或传输敏感数据,请使用 传输层安全性 (TLS) 来保护连接和数据。这种技术用于加密数据,然后将其从客户机发送到服务器,以防止某些常见的(而且容易的)黑客攻击。虽然 Ajax 和 POST 请求可能不是很明显,似乎“隐藏”在浏览器中,但是其网络流量很容易受到 包嗅探 攻击和 中间人攻击 。
您可能很熟悉安全套接字层 (SSL) 加密。[TLS 就是下一代的 SSL]( https://msdn.microsoft.com/en-us/library/windows/desktop/aa380515(v=vs.85) 。换言之,如果您以前使用 SSL,请考虑升级到 TLS。一般而言,我们建议使用 Nginx 来处理 TLS。要获取在 Nginx(和其他服务器)上配置 TLS 的优秀参考信息,请参阅 Recommended Server Configurations (Mozilla Wiki)。
此外,可以使用一种方便的 Let’s Encrypt 工具来获取免费的 TLS 证书,这是由 因特网安全研究组 (ISRG) 提供的免费、自动化的开放式认证中心 (CA)。
2-2 . 攻击者会根据此字段知道后台的框架,采取针对性攻击。
app.disable('x-powered-by');
npm的包 Helmet 通过适当地设置 HTTP 头,帮助您保护应用程序避免一些众所周知的 Web 漏洞。
Helmet 实际上只使用以下九个较小中间件函数的集合,这些功能用于设置与安全相关的 HTTP 头:
4-1 . 将cookie中存储的session id的key设置为通用值如sessionID,在express的环境下,默认值为connect.sid;
4-2 . 设置cookie安全性选项:
引入的第三方依赖需经过安全检验。可以使用npm的nsp或requireSafe来检验第三方软件包的安全性。
以下是来自非常出色的 Node.js 安全核对表 的一些进一步建议。请参阅此博客帖子以了解关于这些建议的所有详细信息:
关注 Node 安全项目 公告,这可能会影响 Express 或应用程序使用的其他模块。一般而言,Node 安全项目是有关 Node 安全性的知识和工具的出色资源。
最后说明一点,和任何其他 Web 应用程序一样,Express 应用程序也容易受到各种基于 Web 的攻击。请熟悉已知的 Web 漏洞 并采取相应的预防措施。
㈢ 请教Express 4 中如何使用connect-mongo
express 4 跟之前很不同。
比如 express.session 和 express.cookieParser 都已经不存在了。
express 和 中间件已经剥离了,除了 express.static。
var connect = require(‘connect’);
var session = require(‘express-session’);
var MongoStore = require(‘connect-mongo’)(connect);
app.use(session({
secret: settings.cookieSecret,
store: new MongoStore({
db: settings.db
})
}));
㈣ 请教Express 4 中如何使用connect-mongo
var connect = require(‘connect’);
var session = require(‘express-session’);
var MongoStore = require(‘connect-mongo’)(connect);
app.use(session({
secret: settings.cookieSecret,
store: new MongoStore({
db: settings.db
})
}));
㈤ 在Outlook Express 中如何导入、导出邮件和通信簿
导入、导出工作可以在 文件的下拉菜单中得到实现。 Outlook Express 5 可以导入以下的通信簿文件 文件类型 Windows 通信簿.wab Eudora Light or Pro (through version 3.0).txt LDAP Data Interchange format (LDIF).idif Microsoft Exchange Personal Address Book.pab Microsoft Internet Mail for Window 3.1 Address Book.abc Netscape Address Book (version 2 or 3).htm Netscape Communicator Address Book (version 4).nab Text File (Comma Separated Values).csv, .txt注意:如果想要从Outlook 中导入联系人,应先从 Outlook 中把联系人导出到 *.csv格式(用逗号分隔的文本格式), 然后导入 Outlook Express. Outlook Express 5 可以导入以下的邮件 文件类型 Eudora Light or Pro (through version 3.0)? Microsoft Exchange.pst Microsoft Internet Mail (32-bit and 16-bit versions)? Microsoft Outlook.pst Microsoft Outlook Express 4.x and 5, beta 2.mbx, .ods Microsoft Windows Messaging.pst Netscape Communicator? Netscape Mail (version 2 and 3)?Outlook Express 5 可以导入以下的邮件账号:Netscape Mail (versions 2 and 3)Netscape CommunicatorEudora mail (through version 4.0)Microsoft ExchangeOutlook Express 5 可以导入以下的新闻账号:Netscape Mail (versions 2 and 3)Netscape CommunicatorMicrosoft Internet Mail and NewsOutlook Express 5 可以导出的通信簿文件类型 Microsoft Exchange Personal Address Book.pab Text File (Comma Separated Values).csvOutlook Express 5 可以导出的邮件 Microsoft Exchange.pst Microsoft Outlook.pst如果您卸载了Internet Explorer 5,则在以前的版本,如 Outlook Express 4 的导入中会增加一个导入 Outlook Express 5 邮件的选项,完成对 Outlook Express 5 的邮件的恢复。