最近去公司面试遇到一个关于Array操作的问题如下:
实现 [5,6,9] + 1 = [5,7,0];
当时回答的时候提出的一种方案是采用Array的reduceRight操作
|
|
最近去公司面试遇到一个关于Array操作的问题如下:
实现 [5,6,9] + 1 = [5,7,0];
当时回答的时候提出的一种方案是采用Array的reduceRight操作
|
|
部分引用:https://pugjs.org/language/attributes.html
app.set(‘view engine’, ‘pug’);
属性修改
以前的Pug/Jade支持如下的表达式来获取数据
|
|
新版本将不再支持上面表达式来获取数据,而是采用以下形式.
|
|
如果你的版本支持ES2015(包括 Node.js/io.js 1.0.0 或者更高版本),还可以采取下面的形式
|
|
|
|
注意 : Attributes applied using &attributes are not automatically escaped. You must be sure to sanitize any user inputs to avoid cross-site scripting (XSS). This is done for you if you are passing in attributes from a mixin call.
在使用jade模板引擎开发时,引入bootstrap发现样式,无法正常显示
|
|
修改为
|
|
就可以正常显示了.具体原因可能跟jade版本或者express版本有关
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
下载安装完成后,需要新建数据存储目录
我的目录为 C:\DATA\DB
调用cmd命令,设置db目录
mongod.exe –dbpath C:\DATA\DB
如果执行成功,会出现一长串这么多东西,不用管它.
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] MongoDB starting : pid=1384 port=27017 dbpat
h=C:\DATA\DB 64-bit host=cuining-PC
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R
2
2016-11-09T11:23:47.798+0800 I CONTROL [initandlisten] db version v3.4.0-rc2-85-g4b42373
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] git version: 4b423738f24c1ccd628e1fcc2b9ee5f
d84bbfe4c
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t-fips 3 May
2016
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] allocator: tcmalloc
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] modules: none
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] build environment:
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] distmod: 2008plus-ssl
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] distarch: x86_64
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] target_arch: x86_64
2016-11-09T11:23:47.799+0800 I CONTROL [initandlisten] options: { storage: { dbPath: “C:\DATA\DB” }
}
2016-11-09T11:23:47.802+0800 I STORAGE [initandlisten] wiredtiger_open
下面将MongoDB服务器作为Windows服务运行
C:\Program Files\MongoDB\Server\3.4\bin>mongod.exe –logpath “C:\DATA\dbConf\mongodb.log” –logappen
d –dbpath “C:\DATA\DB” –port 27017 –serviceName “MongoDBService” –serviceDisplayName “芒果数据服
务” –install
参数 | 描述 |
---|---|
–bind_ip | 绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定默认本地所有IP |
–logpath | 定MongoDB日志文件,注意是指定文件不是目录 |
–logappend | 使用追加的方式写日志 |
–port | 指定服务端口号,默认端口27017 |
–serviceName | 指定服务名称 |
–serviceDisplayName | 指定服务名称,有多个mongodb服务时执行。 |
–install | 指定作为一个Windows服务安装。 |
如果直接运行mongo,则会报以下错误
Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:errno:10061
Mongo运行错误:Failed to connect 127.0.0.1:27017,reason:errno:10061由于目标计算机积极拒绝,无法连接
这是因为服务器没有开启,
net start MongoDBService 启动mongodb服务
net stop MongoDBService 关闭mongodb服务
通过前面几步,我们基本实现了一个模块化编程,现在要为程序实现AMD的接口(define方法)
AMD的规范只定义了一个函数 “define”,它是全局变量。函数的描述为:
define(id?, dependencies?, factory);
具体请参考 –> Amd规范
实现AMD的类库两个比较著名的分别是RequireJS 和 CurlJS
说实话如果直接看这两个类库的源码,可能多少有点难,甚至懵逼,建议初学者可以参考别的实现:foio.github.io
我们把每一个模块改为一个js文件,然后实现我们的AMD模块加载器
add.js
minus.js
calc.js
main.js
通过分析,可以整个过程看做是一个”栈”操作.
- 1.define() 操作定义一个Module,立即压入”栈”(这里push到数组中);
- 2.加载该模块的deps(依赖数组)
- 3.出”栈”执行模块的工厂函数,获取返回值
define 函数
|
|
exec函数(执行context.waitingModules中的模块,如果已经准备好,则从数组中剔除)
|
|
require函数其实也是一个define函数的过程,为了便于理解,暂时不处理
|
|
具体实现可以参考我的github或者foio.github.io实现.
通过上面的代码,我们对模块化有了一定的了解,下面从面向对象思想出发,对模块进行分析.
|
|
我们通过上面的代码可以分析抽象建立我们的Module
|
|
代码修改如下:
|
|
需要为我们的Module对象添加两个方法: fireFactory(执行factory函数,赋值给returnVal)和getDepsValues(获取依赖模块的返回值)
|
|
通常,在js中模块应该是IIFE-立即执行调用函数表达式(Immediately-Invoked-Function-Expressions)运行私有域–即防止变量和方法污染全局变量和方法.格式如下
|
|
下面我们利用模块化设计一个小的测试程序,流程如下:
主要模块( mainModule ) –> 计算模块( calcModule ) –> [增加模块( addModule ),减少模块(minusModule)]
|
|
main.js代码
|
|