node 问题
安装:使用.msi直接安装就好,环境变量已经设置好了
1、问题:验证node是否正确安装
办法:直接计算1+1;创建服务器。
在项目文件夹的路径下,输入node命令,会看到一个提示符,这里只能输入直接输出的语句,不能运行js文件。
2、npm模块
包管理器;一般都已经安装好了;可输入npm来验证;使用时:require;模块文档:npm docs XXX,npm bugs XXX,npm edit XXX。
高阶:package.json.创建依赖关系,使用npm install一键安装所有的包,便于共享。
问题:安装时候会修改默认的路径,所以需要在此路径下(C:\Users\Administrator\AppData\Roaming)新建一个npm文件,这样就可以正常运行npm命令了。
3、输出和输出是不可预测的。想爬取页面的内容,但什么时候会返回什么内容是不能确定的。这里先不考虑顺序,返回内容的顺序并不重要。
回调首先解决不可预测性的方法,其次也是处理并发的方法。
异步并不是node或js特有的,而是一种编程风格。
node几乎从不使用同步,而是异步的调用回调
4、json和js对象字面量
{ "prop": "val" } 这样的声明有可能是JavaScript对象字面量也有可能是JSON字符串,取决于什么上下文使用它,如果是用在string上下文(用单引号或双引号引住,或者从text文件读取)的话,那它就是JSON字符串,如果是用在对象字面量上下文中,那它就是对象字面量。
// 这是JSON字符串
var foo = '{ "prop": "val" }'; // 这是对象字面量
var bar = { "prop": "val" };
而且要注意,JSON有非常严格的语法,在string上下文里{ "prop": "val" } 是个合法的JSON,但{ prop: "val" }和{ 'prop': 'val' }确实不合法的。所有属性名称和它的值都必须用双引号引住,不能使用单引号。另外,即便你用了转义以后的单引号也是不合法的。--转自tom大叔的博客
用引号引住,且内部用双引号的才是json,其他的一切都不是合法的json。
5、http
在同一台电脑上,建立web服务器,并建立客户端去访问,怎么实现不了呢? 应该可以
使用writeHead方法可以返回响应头,可以了重定向。URL模块用来做路由。
还可以创建http客户端。
6、express的安装问题
安装:npm install -g express
需要安装命令工具:npm install -g express-generator;
生成模板引擎为ejs的express项目:express -e microblog
ejs:app.engine('html', require('ejs').renderFile); ejs模板扩展到.html文件,有问题还是要看官网!
express4的启动方式:node bin/www; supervisor bin/www
npm uninstall -g express 可以卸载某一模块;express -V 查看版本,要大写;安装依赖的包:npm install;启动:npm start.
主要介绍了Jade的内容
Jade:基于缩进:缩进不正确,可能会导致错误。作用:可以给HTML动态输入数据
一行在上一行下面缩进,则认为它是上一行的子行;管道描述符:组织大的文本主体;
使用Jade输出数据:变量,循环,条件,内联,包含,Minxin
- 随后的代码应当被执行。 循环,if,else前不需要减号;如果user为变量,则p= user,若user为常量,则p user。
内联:
script
alert('add success');
包含:
body
include includes/header.jade
Mixin:重复某些代码块
安装:npm -g install supervisor
supervisor的启动方式supervisor bin/www,
jade扩展到html文件:include content.html
7、mongodb
解压zip文件就ok了,新建data文件,打开时需要写--dbpath。
mongoose提示找不到mongodb模块,是因为npm install没运行好,智能npm cache clean之后,再重装
express in dependencies add:''mongodb":"*" 不能加逗号
error connecting to database:failed to connect to [127.0.0.1:27017]:出现这个错误,是因为mongodb没有打开。是因为d/mongodb,应该是d:/mongodb
EXPRESS MONGODB 搭建多人博客:
碰到的问题:
设置数据库路径并启动数据库:mongod -dbpath "d:/mongodb/blog":不能用‘’。
是res.redirect(''/)而不是req.redirect('/')
form一定要加method='post';
mongod.exe的闪退:在mongodb的同级目录下,新建data/db,就ok了。
切换数据库:use blog
取出了数据库的所有信息:
User.get=function get(username,callback){
mongodb.open(function(err,db){
if(err){
return callback(err);
} db.collection('users',function(err,collection){
if(err){
mongodb.close();
return callback(err);
} collection.find(function(err,doc){
doc.each(function(err,doc){
if(doc){
console.log('name:'+doc.name+';password:'+doc.password);
}
})
});
});
});
};
express jade:index.jade extends layout layout.jade
updata form use PUT method
req.flash 在3.x后都不支持了
express的上传:
1、
app.use(express.bodyParser({uploadDir:'./uploads'})); //指定上传地址
<form method="post" enctype="multipart/form-data" action="/file-upload">
<input type="file" name="thumbnail">
<input type="submit">
</form> app.post('/file-upload', function(req, res, next) {
console.log(req.body);
console.log(req.files);
});
要先在根目录下新建uploads文件。重命名:
app.post('/file-upload',function(req,res,next){
var tmp_path=req.files.thumbnail.path;
var target_path='./public/images/'+req.files.thumbnail.name; fs.rename(tmp_path,target_path,function(err){
if(err) throw err;
}); res.redirect('/');
})
express中集成了formidable,所以一起用时会有问题。
安装模块时,提示error ENOENT,Stat:只需要在提示路径下新建npm文件就可以。
mkdir nodejs-connect && cd nodejs-connect:可以连起来写
没有装npm install hiredis redis,但也能访问redis。
直接启动redis客户端:redis_cli
每个Redis元素有一个类型,如果这个Redis元素的类型是hash,那么就可以用hkeys找到他有哪些key
data-query-params:
function queryParams(params){
params.searchText = 'test query';
return params;
}
在server用req.query.searchText获取
data-response-handler:
function responseHandler(res) {
console.log('keys:'+res.col);
return res.child;
}
bootstrap table:load 是直接加载数据,refresh 一般用于从服务器中获取数据;刷新的话,会先消失,再重现,卡的动作很明显。silent: true,
bootstrap table:在它的基础上,用其他插件实现reorder columns,不能成功的原因:jquery.sorttable.js:类库的版本要求低;由于bt会在th里加元素来调整字的位置。而jquery.sorttable.js要求th里面的div要和th同宽高。所以一直对不上。
卸载:直接删掉就好,nodejs
20151003
最近在做一个项目,自己主要做前端的,后端使用php,别人做的。自己把后端node实现了一遍。
学到的东西:mysql,async等模块,MVC的实践;不足的地方:express-session一定要跟redis等数据库联系起来吗?MVC很多代码不知道怎么放更合理。
接下来需要看看别人的项目:
1、hi-cms:https://github.com/highsea/hi-cms 用的技术都一样,看一下别人怎么写的。
2、开源CMS:https://git.oschina.net/doramart/DoraCMS
3、网络平台:http://git.oschina.net/liweisadleader/CodeCraft
4、cms:https://github.com/keystonejs/keystone
hexo是神马东西?
守护nodejs进程:在出错之后,如何处理
1、子进程的方法
var spawn = require('child_process').spawn; function start(){
nw = spawn('supervisor bin/www'); nw.on('close',function(code, signal){
nw.kill(signal);
nw = start();
});
nw.on('error',function(code, signal){
nw.kill(signal);
nw = start();
});
return nw;
}; start();
配置文件 使用方式
config.js
module.exports={'a':1,'b':1}
调用:
var config=require('./config')
post 传递对象数组
var a = [
{
"name": 'name1',
"age": 'age1'
},
{
"name": 'name2',
"age": 'age2'
}
];
$.post('/test', {
post: JSON.stringify(a)
}, function(data){
debugger
})
后端
router.post('/test', function(req, res, next) {
console.log('/test'); var a = JSON.parse(req.body.post); console.log(util.inspect({a: a})); res.send({
path: '/test'
})
});
如果不这样做的话,很容易出现 'post[0][name]': 'name1',这种情况
post传递json
json
{
"Email": "sfpeng@163.com",
"Password": "123456"
}
以string传递,同域和跨域都一样
$.post('/test', {
post: JSON.stringify(a)
}, function(data){
debugger
})
以json传递
同域
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
}); $.post('/test', JSON.stringify(a), function(data){
debugger
});
跨域 现在有点问题,server需要验证header method:https://segmentfault.com/a/1190000000709909 不是那么简单的请求
$.ajaxSetup({
contentType: "application/json; charset=utf-8"
}); $.post('/test', JSON.stringify(a), function(data){
debugger
});
server
app.use(function(req, res, next){
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
有一次:访问另一个网站的json数据,通过这种方式还是没法跨域,只能提供接口之后,才成功访问
gulp不是内部或外部命令
一种原因是,环境变量没有添加,需要添加 c:/users/administrator/appdata/roaming/npm
另一种原因是,gulp没有正确安装。把gulp全局和局部安装一下。
n 模块 管理nodejs版本:http://www.jianshu.com/p/cfdfd3d04215
升级到最新版 n stable
升级到指定版 n v0.12.2
mac 上这个模块是正常的;pc 上使用有问题。
退出,两种情况:
1、ctrl+z,需要kill进程
2、ctrl+c,不需要kill进程
错误处理
if(err){
res.json({
msg: 'error'
});
return;
}
中间件存在的问题:
每用过一个中间件,都是把用法记录下来。但是下次用时,可能会是不同的版本,用法也有不同
module.exports exports的区别
https://cnodejs.org/topic/52308842101e574521c16e06
模块名跟项目名 不能相同
测试
packages.json
"chai": "^3.5.0",
"istanbul": "^0.4.5",
"mocha": "^3.2.0",
"mocha-phantomjs": "^4.1.0",
"should": "^11.1.2",
"supertest": "^2.0.1"
/test
mocha init f2e
Makefile
命令以tab开头
在跟目录下执行make test
test:
./node_modules/.bin/mocha cov test-cov:
./node_modules/.bin/istanbul cover _mocha .PHONY: test cov test-cov
app.locals 设置模板全局常量
res.locals 添加模板必需的三个变量
中间件
写一个公用的函数,可以经常调用
nvm
切换nodejs版本
已安装
nvm ls
nvm use 0.12
nrm
管理npm源的工具
nrm ls
nrm use cnpm
require
同步
判断是否是程序的入口文件 require.main === module
循环引用 以后注意下
npm config set save-exact true,这样每次 npm i xxx --save 的时候会锁定依赖的版本号,相当于加了 --save-exact 参数。
使用npm shrinkwrap锁死依赖版本号
通过运行 npm shrinkwrap,会在当前目录下产生一个 npm-shrinkwrap.json,里面包含了通过 node_modules 计算出的模块的依赖树及版本。
--save 加入依赖
--save-dev 加入开发依赖
node 问题的更多相关文章
- babeljs源码
babel.min.js!function(e,t){"object"==typeof exports&&"object"==typeof mo ...
- NPM (node package manager) 入门 - 基础使用
什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...
- node服务的监控预警系统架构
需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- 细说WebSocket - Node篇
在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...
- 高大上的微服务可以很简单,使用node写微服务
安装 npm install m-service --save 使用 编写服务处理函数 // dir1/file1.js // 使用传入的console参数输出可以自动在日志里带上request id ...
- 构建通用的 React 和 Node 应用
这是一篇非常优秀的 React 教程,这篇文章对 React 组件.React Router 以及 Node 做了很好的梳理.我是 9 月份读的该文章,当时跟着教程做了一遍,收获很大.但是由于时间原因 ...
- 利用Node.js的Net模块实现一个命令行多人聊天室
1.net模块基本API 要使用Node.js的net模块实现一个命令行聊天室,就必须先了解NET模块的API使用.NET模块API分为两大类:Server和Socket类.工厂方法. Server类 ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Node.js:理解stream
Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...
随机推荐
- 常用类一一基本数据类型的包装类(WrapperClass)一一Byte Short nteger Long Float Double Character Boolean
为什么需要包装类? JAVA是支持跨平台的.可以在服务器 也可以在手机上运行 基本数据类型 在栈中 效率更高 包装类 将数据类型转换成对象 在 堆中 利于操作 package cn.bjsxt.w ...
- 协同过滤 spark scala
1 http://www.cnblogs.com/charlesblc/p/6165201.html [转载]协同过滤 & Spark机器学习实战 2 基于Spark构建推荐引擎之一:基于物品 ...
- 线性判别分析LDA详解
1 Linear Discriminant Analysis 相较于FLD(Fisher Linear Decriminant),LDA假设:1.样本数据服从正态分布,2.各类得协方差相等.虽然 ...
- tensorflow生成随机数的操作 tf.random_normal & tf.random_uniform & tf.truncated_normal & tf.random_shuffle
tf.random_normal 从正态分布输出随机值. random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name ...
- 用R进行统计学分析
1.基本统计 summary函数:R中的summary函数根据输入的类提供输入的摘要.该函数根据输入对象的类调用各种函数.返回值也取决于输入对象.例如,如果输入是一个由数字数据组成的向量,它将为数据提 ...
- ubuntu部署jenkins
https://www.cnblogs.com/lozz/p/9962316.html 1.安装 wget -q -O - https://pkg.jenkins.io/debian/jenkins- ...
- IIS7web服务器调试ASP.net程序遇到的一些故障的解决办法
1. [由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] 故障描述:[由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面] ...
- 合并区间 · Merge Intervals & 插入区间 · Insert Interval
[抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10] ...
- Maven核心简析
本文以类图的方式,介绍maven核心的12个概念以及相互之间的关系. Table of Contents 1 maven管理的目标:工程(Project) 1.1 工程依赖关系 1.2 工程聚合关系 ...
- 2-string相关函数
string真的很好用,希望通过逐步的学习逐渐掌握的string的用法: 1. append() -- 在字符串的末尾添加字符 2. find() -- 在字符串中查找字符串 4. insert() ...