Node.js代码转php

Node.js代码转php,第1张

如果你们开发团队正在使用PHP,并考虑迁移到Nodejs,这篇文章很适合你。本文并不探讨从PHP移植到Nodejs的细节,以及Nodejs的基础知识。而是涵盖:决策制定、着手点的描述、编写 Nodejs 服务器的深层次注意事项、以及部署策略。
为什么迁移?
1stdibs 决定从 Apache/PHP 迁移到 Nodejs+Express 有五个理由:
代码更少
全栈式JS
开发人员幸福度更高
投入回报率
未来的优化
代码更少
1stdibs基于面向服务体系架构(SAO),前端调用后台的Java服务。这意味着需要同时维护前端模型,以及服务端PHP和客户端JS模板。试想一下,如果可以摆脱PHP,就能够统一前端展现与后台模型于一种语言:JavaScript(同时可以合并一些模板)。从维护的角度来看,这么做代码更简洁,并且没有重复逻辑。
同构JavaScript万岁!
全栈式JS(及其优点)
整个开发栈使用一种语言很简便。对开发者来说,较少的环境切换使他们开心和高效。额外的好处是工具使用更简单。相比之前使用Composer和npm两个包管理器,现在只需要一个。尽管Composer很出色,由于nbp负责工具和客户端管理,nbp总是必要的。一旦去掉所有的PHP代码,nbp将成为仅有的包管理器。
开发人员乐意
我们要保证开发人员的技能集得到扩展、职业生涯不断发展,这一点很重要。对于JavaScript工程师而言,Nodejs极具吸引力。能够在服务端使用与客户端相同的工具、风格和模式,是非常顺手和高效的。此外,Nodejs相当流行,在企业级开发上也得到了长足发展。Nodejs是JavaScript工程师的必备技能。
投入回报率
我们在招聘优秀的JS工程师和培训初级JS工程师方面花了大价钱。由于客户端栈很复杂,我们需要高级JavaScript工程师。我们不再雇用PHP工程师,仅仅雇用了JavaScript工程师。我们的观点是,为什么不培养他们在服务端的技能呢?
未来的优化
长远而言,我们打算把两个庞大的应用分割成一系列独立部署的小应用。这很容易通过Nodejs、Express和nbp实现。理论上,PHP(比如使用Slim)可以做同样的事。但我们非但得不到上述好处,还会搞得一团糟:在Apache/PHP上进行 *** 作会更加复杂,基础设施也会变得有些奇怪。
选择框架
那个最终被我们用Nodejs替换掉的PHP应用,主要有如下职责:
登录和授权
路由选择和服务端模板引擎(服务HTML)
引导前端应用
代理服务(为了回避CORS)
服务静态资源(js,css,images)
这些就是我们需要替换掉的基本功能。
我们尝试过不少框架,Express令人叹为观止(试一下我们评估过的spreadsheet)。任何未基于Express 的框架看起来都不靠谱。Express通俗易懂,并有良好的文档。另外,可以招聘到正经培训过Express的人。
我们添加了一些kraken的核心模块(express-enrouten用于路由选择、lusca负责安全);此外,i18n-node提供国际化支持,模板引擎使用Swig(我们后来放弃了Swig。呵呵,开源软件还是有风险的)。
我们考虑过全盘使用kraken,但是从原来的服务端php模板引擎Twig切换到Swig直截了当,还很快捷。此外,kraken里面的Dust和i18n也不讨人喜欢。
编写服务器
选好了框架,下一步该写服务器了。
使用Apache+PHP时,你不需要再写一个服务器。Apache本身就是服务器,PHP是应用。如果使用Nodejs,服务器和应用是同一个。从Apache/PHP转到PHP,你需要处理一些之前自然而然使用的功能,这一点很重要。使用Apache,你(或者系统管理员)配置服务器,在PHP应用里完全不用关心Apache为你处理的那些事。Nodejs却以一种不同的方式来工作。
提供静态文件服务
毋庸置疑,提供静态文件服务是Apache的核心功能。Nodejs与此不同,你要在应用中配置静态文件服务。幸运的是这很简单,有良好的文档说明,并且是在Express中实现的。
日志
很多基本的Apache配置为你提供访问日志和错误日志。使用Nodejs时,估计你也猜到了,同样需要在应用中配置。所幸很多优秀的开源软件包使之变得很简单。Morgan是一个基本的请求日志记录器,它配置简单,允许你把日志写到输出流(标准输出设备或文件)。如果你需要把日志写到数据库,或者有别的(更高级的)日志需求,那就试一下winston吧。
代理
我们有一个基本需求:能够代理传输客户端ajax请求到后台服务。相比于处理CORS头,代理所有来自相同域的请求要简单得多。但你要想通过代理使用webpack-dev-server(正如我们所做的),就必须在Nodejs应用中处理这一问题。>

一、Express框架

前面的章节已经介绍过了,可以使用npm来安装nodejs模块。具体 *** 作请参照以前写的nodejs概论。

Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的>

使用方法,在cmd中打开你所想创建web项目的路径。然后输入

Express appname

即可创建一个名为appname的web项目。控制台打印结果

在cmd中进入appname文件夹输入

node appnamejs

返回结果如下图,表示安装成功!

在项目开发中经常会出现这样的问题

此错误表示没有安装相关模块,解决办法是在cmd上打开项目文件夹,输入

npm install express

安装成功后会在本文件路径下生成一个node_modules,里面包含了Express框架代码。

其他模块也可用类似的方法进行安装,安装后的路径同样是在node_modules下。

二、jade模块

jade是一款高性能、简洁易懂的模板引擎。可通过jade来编写html文件。

jade类似一个用于快速编写html的语言,其编写后的文件后缀为jade。

以下为文件的内容

在cmd中输入,压缩的过的可以通过加-P来不压缩,如果每次更改模版都要打命令行一次很麻烦是不是,我们可以通过加上jade -P -w jadejade  加上一个-w来开启监视模式,每次更改模版,html文件都会自动编译咯

生成后的html文件如下:

在jada文件中是可以使用for循环和if判断语句的,可以让你体会类似JSP的<%%>和php的<php></php>在网页上输出数据的快感。

三、forever模块

nodejs作为>

1后台服务运行,监控运行日志,以及>

2确保项目的正常安全运行,Nodejs的启动命令node,很大程度无法满足运行需求;

Nodejs的forever模块在第二点就可以起到很大的作用,同时其拥有监控文件更改、自动重启等功能。

forever模块的使用方法有两种:1在命令行中使用

forever -l foreverlog -o outlog -e errlog appjs
-l foreverlog -o outlog -e errlog分别指定了forever的运行日志,脚本流水日志,脚本运行错误日志,启动后将在本文件夹下产生outlog、errlog文件。

2在编码中require forever模块使用。

四、SocketIO模块

SocketIO模块主要功能是将WebSocket协议应用到所有浏览器。主要用于实时的长连接多求情项目中。

例如:在线联网游戏,实时聊天、实时股票查看、二维码扫描登录等。

安装方法仍然是在cmd在中输入npm install socketio

如何使用SocketIO来创建一个项目。

需要分别实现服务端和客户端的逻辑:

先创建一个服务端的nodejs脚本index_serverjs

var app = require('>

其中,socketemit()为Socket发送消息的函数,第一个参数表示发送消息的key值,第二个参数为发送消息的内容,也就是发送的数据。

Socket。on()为Socket接收消息的函数,第一个参数为接收消息的可以值,第二个参数为回调函数,其中回调函数携带的参数为接收消息所发送的数据。

接下来web前端如何使用JavaScrit 来连接Socket服务器。

新建一个index_clienthtml

<script type="text/javascript" src="socketjs"></script>
<script type="text/javascript">    var socket = ioconnect('>

<script type="text/javascript" src="socketjs"></script>加载已经安装好的Socketio的本地JavaScrit文件。
var socket = ioconnect('>

socketio详细请参阅    >

五、request模块

request模块为开发者提供了一种简单访问>

安装:

npm install requset

request模块基本上覆盖了所有的>

get和post的区别

get:

1使用get向服务器发出和接收的请求会附在url之后。类似:>

2get请求不能超过1024个字节。

post没有限制,也不会附在url上。

接下来做一个简单的实例

get实例:

首先新建一个服务器app_getjs

var >

再建一个发送求情的request_getjs文件

var request=require('request');
requestget(">

在CMD中运行app_getjs,运行成功后,再打开一个cmd(之前的cmd不要关闭),执行request_getjs文件。

执行后的结果如下

hello world
GET

可以看出,通过requestget方法访问

>

var >

然后再新建一个request_postjs

var request=require("request");
requestpost('>

像上面一样在cmd中执行后显示的结果如下:

D:\nodejs\src\request>node request_postjs
{"name":"ermu","book":"nodejs"}
POST

request post提交了一个json对象{"name":"ermu","book":"nodejs"}而服务器接通过获取该POST数据,然后返回客户端,同时将>

request post参数可以有两种传递方式。

其中,第一种是将url和form表单的数据作为json参数在request post传递。举例如下:

requestpost('url':'>

另一种是将url和form作为两个参数,上面的实例就是使用这种方法。

六、  Formidable模块

该模块的目的是为了解决文件上传。

在原生的nodejs模块中,提供了获取post数据的方法,但是并没有直接获取上传文件。

就按它说的做, 找到Sqlasp文件的第七行,一般这种文件都会有注释的,根据里面的注释,把防sql注入的代码段删掉或注释掉,再运行试试 你是在哪个网上搜索时遇到的? 我还以为你是做网站的, 如果是那个网站出现这个问题,那就是网站的问题


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12911532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存