centos nodemon?node环境变量是干嘛用的
大家好,关于centos nodemon很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于node环境变量是干嘛用的的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
如何使用docker部署iis
我们建立的是一个node.js的web服务应用。我们需要在当前目录下建立如下三个文件。1).gitignorenode_modules/*2)package.json{"name":"docker-centos-hello","private":true,"version":"0.0.1","description":"Node.jsHelloworldapponCentOSusingdocker","author":"DanielGasienica","dependencies":{"express":"3.2.4"}}3)server.jsvarexpress=require('express'),app=express(),redis=require('redis'),RedisStore=require('connect-redis')(express),server=require('http').createServer(app);app.configure(function(){app.use(express.cookieParser('keyboard-cat'));app.use(express.session({store:newRedisStore({host:process.env.REDIS_HOST||'localhost',port:process.env.REDIS_PORT||6379,db:process.env.REDIS_DB||0}),cookie:{expires:false,maxAge:30*24*60*60*1000}}));});app.get('/',function(req,res){res.json({status:"ok"});});varport=process.env.HTTP_PORT||3000;server.listen(port);console.log('Listeningonport'+port);配置Dockerfile我们需要通过Dockerfile来配置我们的docker镜像。FROMubuntu:14.04MAINTAINERzengjinlongRUNapt-getupdate#InstallRedisRUNapt-get-y- installpythonredis-serverRUNapt-get-y- installwget#InstallNodeRUNcd/opt&&\wget*.&&\rm-f/opt/node-v0.10.33-linux-x64.tar.gz#SettheworkingdirectoryWORKDIR/srcjCMD["/bin/bash"]有了Dockerfile之后,就可以通过dockerbuild来建立我们的镜像。dockerbuild-tminimicall/node_web:0.1.这里需要说明的是,你需要灵活的根据你的ubuntu真实的环境来变化中间的指令。例如,当我们第一次执行的时候,告诉我找不到pythonredis-server,我想应该是我的apt源太out了,所以,我加了RUNapt-getupdate.就解决了这个问题。当我wget的时候,说没有这个指令,那么我就得安装wget.而nodejs的地址,也是我去从nodejs的官网查找的。所以碰到问题,具体问题具体分析。查看我们建立的镜像。micall@micall-ThinkPad:~/docker/nodejs_web_app$sudodockerimagesREPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZEminimicall/node_web0.1730770dff17f6minutesago268.7MBcentoscentos670441cac1ed52weeksago215.8MBubuntu14.045506de2b643b4weeksago199.3MB启动我们的镜像:sudodockerrun-i-t--rm\>-p3000:3000\>-v`pwd`:/src\>minimicall/node_web:0.1这时候我们已经进入到了这个镜像启动的容器里面了。root@d80a2ed6b4c0:/src#执行下列命令root@d80a2ed6b4c0:/src#npminstall--quiet>/dev/nullnpmWARNengineformidable@1.0.13:wanted:{"node":"/dev/nullroot@d80a2ed6b4c0:/src#lsDockerfileDockerfile~index.js~package.jsonserver.jssrcDockerfile.centosindex.jsnode_modulespackage.json~server.js~root@d80a2ed6b4c0:/src#nodemonserver.js22Nov14:37:31-[nodemon]v1.2.122Nov14:37:31-[nodemon]torestartatanytime,enter`rs`22Nov14:37:31-[nodemon]watching:*.*22Nov14:37:31-[nodemon]starting`nodeserver.js`Listeningonport3000这个时候用浏览器打开:,会的到如下结果。{"status":"ok"}
启动node服务
ctrl+c后可以重启服务不node
1、在命令控制台按Ctrl+C,终止当前所运吵渗租行的代码
2、然后继续nodefilename.js,即可重启node.js
自动重启Node服务
NodeSupervisor原本是用于服务器上Node.js应用崩溃的时候,自动重新启动。当然它也可以喊雹监控你的项目的js文件变化,自动重启来方升兆便调试。
安装sudonpminstallsupervisor-g,或者使用sudocnpminstallsupervisor-g。
使用方法:
1、关掉之前开启的node服务。
2、然后在项目路径下使用命令:supervisoryourApp.js来开启Supervisor。它会开启node服务,并不停的检测文件变化,当JS文件内容修改后,自动重启服务,很方便。
如何用命令行开启nodejs搭建web服务器?
首先,需要安装nodejs,这个可以去官网下载,目前我本地安装的v0.12版本。
安装完成后可以通过命令行测试安装是否成功,输入:node-v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部下载,如果有需要,可以使用以下命令安装:npminstallxxx。
开始
下一步,新建js文件,可以命名为server.js,代码如下:
varhttp=require('http');
varurl=require('url');
varpath=require('path');
varfs=require('fs');
vardir,arg=process.argv[2]||'';//命芦裂袭令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
//比如使用命令nodeserverdebug,意思就是debug文件夹与server.js文件同级
//且你想以debug文件夹启动web服务
http.createServer(function(req,res){
varpathname=__dirname+url.parse(req.url).pathname;
[linux运维]?1、下载最新node.js二进制源码安装包(29MB),V8.2.1更新于2017年7月20日?
wget?-c?
wget是一个Linux下载文件的工具,centos自带。
wget?-c?是断点续传下载方式,后面的URL就是提供下载文件的地址
默认获取的文件地址在/root目录下,命令pwd显示当前目录源带.
??2、安装必要的编译软件?吖米yum?install?gcc?gcc-c++?yum?=?Yellow?dog?Updater,?Modified。改良黄狗更新器,centos自带智能包管理器。?中途询问,输入y:在线下载安装?d:只下载不安装?N:不下载不安装
Is?this?ok?[y/d/N]?:y
??3、解压源码tar?-zxvf?node-v8.2.1.tar.gz当前目录/root/就会多一个node-v8.2.1的文件夹-z:透过gzip的支持进行压缩/解压缩:此时文件名最好为*.tar.gz-x:解压缩的功能-v:在压缩/解压缩的过程中,将正在处理文件名显示出来
f?filename:-f后面要立刻接被处理的文件名.
??4、编译node源码包?1)进入到node源码包解压目录?cd?node-v8.2.1指定NodeJS安装位置./configure?--prefix=/usr/local/node?不指定prefix,则可执行文件默认放在/usr?/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr?/local/share。你要卸载这个程序,要么在原来的make目录下用一次make?uninstall(前提是make文件指定过uninstall),要么去上述目录里面把相关的文件一个个手工删掉。?执行安装文件,足足等了40多分钟
make??make?install
??4、添加环境变量???创建并打开新文件?不存在node.sh文件?[root@localhost?node-v8.1.3]#?vim?/etc/profile.d/node.sh??输入node安装位置的bin目录所在位置?export?PATH=$PATH:/usr/local/node/binESC?输入:wq?提示:?命令输入错了vim-bash:?rt:?command?not?found-bash:?vim:?command?not?found[解决]i.?那么如何安装?vim?呢?输入rpm?-qa|grep?vim?命令,?陪兄如果?vim?已经正确安装,会返回下面的三行代码:root@server1?[~]#?rpm?-qa|grep?vimvim-enhanced-7.0.109-7.el5vim-minimal-7.0.109-7.el5vim-common-7.0.109-7.el5?如果少了其中的某一条,比如?vim-enhanced?的,就用命令?yum?-y?install?vim-enhanced?来安装:yum?-y?install?vim-enhanced?如果上面的三条一条都没有返回,?可以直接用?yum?-y?install?vim*?命令yum?-y?install?vim*
??使用su?root?source?/etc/profile.d/node.sh?=.?/etc/profile.d/node.sh?[不间断运行nodejs服务]?npm?install?forever?-g?forever?start?app.js
node实现自启动服务
对于nodeapp.js启动服务的话,遇到不可预测的错误时,服务停止后会影响网站或者系统手者的正常运行,,服务的自启动就显得袜薯棚非常的重要。
npminstall-gnodemon
安装结束后的使用方告则法
nodemonapp.js
服务启动成功。
linux如何后台运行node服务?
在你的任意目录输入命令:npminstallpm2-g
1.找到全局环境PATH路径
输入命令:echo$PATH
回车后:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
你的路径和我的可能不一样,但没关系,你可以选择任何一个以:隔开的路径做为系统环境路径,我通常会选/usr/local/bin
2:找到pm2的安装路径
在上面输入npminstallpm2-g全局安装时
/usr/sbin/nodejs/bin/pm2-/usr/sbin/nodejs/lib/node_modules/pm2/bin/pm2
/usr/sbin/nodejs/bin/pm2是安装路径(你的可能和我的不一样)
3.好了都找到了,
就重要的一步要开始了,睁大你的双眼。
命令为:ln-s/usr/sbin/nodejs/bin/空袜衡pm2/usr/local/bin/(注意空格)
格式:ln-s空格pm2安装路径空格系统环境路径
OK,搞定,接下来验证一把…
[root@iZmwyb7v60px1zZ~]#pm2list
回车...
$pm2startapp.js#启动app.js应用程序
$pm2startapp.js–name=”api”#启动应用程序并命名为“api”
$pm2startapp.js–watch#当文件变化时自动重启应用
$pm2startscript.sh#启动好销bash脚本
$pm2list#列表PM2启斗做动的所有的应用程序
$pm2monit#显示每个应用程序的CPU和内存占用情况
$pm2show[app-name]#显示应用程序的所有信息
$pm2logs#显示所有应用程序的日志
$pm2logs[app-name]#显示指定应用程序的日志
$pm2stopall#停止所有的应用程序
$pm2stop0#停止id为0的指定应用程序
$pm2restartall#重启所有应用
$pm2reloadall#重启clustermode下的所有应用
$pm2gracefulReloadall#Gracefulreloadallappsinclustermode
$pm2deleteall#关闭并删除所有应用
$pm2delete0#删除指定应用id0
$pm2scaleapi10#把名字叫api的应用扩展到10个实例
$pm2reset[app-name]#重置重启数量
$pm2startup#创建开机自启动命令
$pm2save#保存当前应用列表
$pm2resurrect#重新加载保存的应用列表
$pm2update#Saveprocesses,killPM2andrestoreprocesses
$pm2generate#Generateasamplejsonconfigurationfile
node本地服务启动报Error:listenEADDRINUSE,80端口被占用解决方法
1.第一步,根据端口号岁吵查找对应的进程号
netstat-ano|findstr80//列出进程极其占用的端口,且包含80
2.第二步,据进程号寻找进程名称
tasklist|findstr8156
3.找到是node.exe占用巧雀厅后,杀孝隐死进程
taskkill/f/imnode.exe
node是怎么启服务
下面是以express框胡穗衫架为例,启动node服务的三种方法(已测试),使用族基express安装的文件如下:
一、使用node命令启动
nodeserver/bin/www1
二、使用webStorm启动
1,打开webStorm,点裤腔击运行(run)下的编辑配置(EditConfiguration)
2,添加新的配置
3,命名并选择要执行的文件
选择要执行bin/www文件
4,启动node服务
三、pm2启动
1安装pm2
cnpmi-gpm21
是否安装成功,可检查版本pm2-v
2启动服务
pm2startserver/bin/www1
pm2是一个带有负载均衡功能的Node应用的进程管理器,pm2启动后,我们不需要另开一个窗口或停掉服务,便可以进行后续操作?
pm2可以通过配置,启动多个node服务,pm2list可以查看当前启动的所有node服务
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
需求:
使用Node.js爬取网页资源,开箱即用的配置
将爬取到的网页内容以PDF格式输出
如果你是一名技术人员,那么可以看我接下来的文章,否则,请直接移步到我的github仓库,直接看文档使用即可
仓库地址:附带文档和源码
本需求使用到的技术:Node.js和puppeteer
puppeteer官网地址: puppeteer地址
Node.js官网地址:链接描述
Puppeteer是谷歌官方出品的一个通过DevTools协议控制headless Chrome的Node库。可以通过Puppeteer的提供的api直接控制Chrome模拟大部分用户操作来进行UI Test或者作为爬虫访问页面来收集数据。
环境和安装
Puppeteer本身依赖6.4以上的Node,但是为了异步超级好用的async/await,推荐使用7.6版本以上的Node。另外headless Chrome本身对服务器依赖的库的版本要求比较高,centos服务器依赖偏稳定,v6很难使用headless Chrome,提升依赖版本可能出现各种服务器问题(包括且不限于无法使用ssh),最好使用高版本服务器。(建议使用最新版本的Node.js)
小试牛刀,爬取京东资源
const puppeteer= require('puppeteer');//引入依赖
(async()=>{//使用async函数完美异步
const browser= await puppeteer.launch();//打开新的浏览器
const page= await browser.newPage();//打开新的网页
await page.goto('');//前往里面'url'的网页
const result= await page.evaluate(()=>{//这个result数组包含所有的图片src地址
let arr= [];//这个箭头函数内部写处理的逻辑
const imgs= document.querySelectorAll('img');
imgs.forEach(function(item){
arr.push(item.src)
})
return arr
});
//'此时的result就是得到的爬虫数据,可以通过'fs'模块保存'
})()
复制过去使用命令行命令 ` node文件名 `就可以运行获取爬虫数据了这个 puppeteer的包,其实是替我们开启了另一个浏览器,重新去开启网页,获取它们的数据。
上面只爬取了京东首页的图片内容,假设我的需求进一步扩大,需要爬取京东首页中的所有<a>标签对应的跳转网页中的所有 title的文字内容,最后放到一个数组中。
我们的async函数上面一共分了五步,只有 puppeteer.launch(),browser.newPage(), browser.close()是固定的写法。
page.goto指定我们去哪个网页爬取数据,可以更换内部url地址,也可以多次调用这个方法。
page.evaluate这个函数,内部是处理我们进入想要爬取网页的数据逻辑
page.goto和page.evaluate两个方法,可以在async内部调用多次,那意味着我们可以先进入京东网页,处理逻辑后,再次调用page.goto这个函数
注意,上面这一切逻辑,都是puppeteer这个包帮我们在看不见的地方开启了另外一个浏览器,然后处理逻辑,所以最终要调用browser.close()方法关闭那个浏览器。
这时候我们对上一篇的代码进行优化,爬取对应的资源。
const puppeteer= require('puppeteer');
(async()=>{
const browser= await puppeteer.launch();
const page= await browser.newPage();
await page.goto('');
const hrefArr= await page.evaluate(()=>{
let arr= [];
const aNodes= document.querySelectorAll('.cate_menu_lk');
aNodes.forEach(function(item){
arr.push(item.href)
})
return arr
});
let arr= [];
for(let i= 0; i< hrefArr.length; i++){
const url= hrefArr[i];
console.log(url)//这里可以打印
await page.goto(url);
const result= await page.evaluate(()=>{//这个方法内部console.log无效
return$('title').text();//返回每个界面的title文字内容
});
arr.push(result)//每次循环给数组中添加对应的值
}
console.log(arr)//得到对应的数据可以通过Node.js的 fs模块保存到本地
await browser.close()
})()
上面有天坑 page.evaluate函数内部的console.log不能打印,而且内部不能获取外部的变量,只能return返回,
使用的选择器必须先去对应界面的控制台实验过能不能选择DOM再使用,比如京东无法使用querySelector。这里由于
京东的分界面都使用了jQuery,所以我们可以用jQuery,总之他们开发能用的选择器,我们都可以用,否则就不可以。
接下来我们直接来爬取Node.js的官网首页然后直接生成PDF
无论您是否了解Node.js和puppeteer的爬虫的人员都可以操作,请您一定万分仔细阅读本文档并按顺序执行每一步
本项目实现需求:给我们一个网页地址,爬取他的网页内容,然后输出成我们想要的PDF格式文档,请注意,是高质量的PDF文档
第一步,安装Node.js,推荐,Node.js的中文官网下载对应的操作系统包
第二步,在下载安装完了Node.js后,启动windows命令行工具(windows下启动系统搜索功能,输入cmd,回车,就出来了)
第三步需要查看环境变量是否已经自动配置,在命令行工具中输入 node-v,如果出现 v10.***字段,则说明成功安装Node.js
第四步如果您在第三步发现输入node-v还是没有出现对应的字段,那么请您重启电脑即可
第五步打开本项目文件夹,打开命令行工具(windows系统中直接在文件的url地址栏输入cmd就可以打开了),输入 npm i cnpm nodemon-g
第六步下载puppeteer爬虫包,在完成第五步后,使用cnpm i puppeteer--save命令即可下载
第七步完成第六步下载后,打开本项目的url.js,将您需要爬虫爬取的网页地址替换上去(默认是)
第八步在命令行中输入 nodemon index.js即可爬取对应的内容,并且自动输出到当前文件夹下面的index.pdf文件中
TIPS:本项目设计思想就是一个网页一个PDF文件,所以每次爬取一个单独页面后,请把index.pdf拷贝出去,然后继续更换url地址,继续爬取,生成新的PDF文件,当然,您也可以通过循环编译等方式去一次性爬取多个网页生成多个PDF文件。
对应像京东首页这样的开启了图片懒加载的网页,爬取到的部分内容是loading状态的内容,对于有一些反爬虫机制的网页,爬虫也会出现问题,但是绝大多数网站都是可以的
const puppeteer= require('puppeteer');
const url= require('./url');
(async()=>{
const browser= await puppeteer.launch({ headless: true})
const page= await browser.newPage()
//选择要打开的网页
await page.goto(url,{ waitUntil:'networkidle0'})
//选择你要输出的那个PDF文件路径,把爬取到的内容输出到PDF中,必须是存在的PDF,可以是空内容,如果不是空的内容PDF,那么会覆盖内容
let pdfFilePath='./index.pdf';
//根据你的配置选项,我们这里选择A4纸的规格输出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format:'A4',
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
文件解构设计
数据在这个时代非常珍贵,按照网页的设计逻辑,选定特定的href的地址,可以先直接获取对应的资源,也可以通过再次使用 page.goto方法进入,再调用 page.evaluate()处理逻辑,或者输出对应的PDF文件,当然也可以一口气输出多个PDF文件~
这里就不做过多介绍了,毕竟 Node.js是可以上天的,或许未来它真的什么都能做。这么优质简短的教程,请收藏
或者转发给您的朋友,谢谢。