菜鸟教程中的nodejs连接mysql数据库教程存在sql注入问题吗?
是否有漏洞与代码有关,与此无关
其中主流的连接MySQL的方式是用mysql或者mysql2包,它们只是提供了调用驱动的api。很多框架中包括egg,nest都是基于此封装的。
但这不是SQL注入的关键,它只是一种连接方式。
它只管连接,不管其他的,存不存在SQL注入完全靠写代码的人本身啊。
一句脚本本没有问题(知道不让直接放sql的,也是放注入),但是你如果让SQL变成由用户输入拼接而成,那就存在SQL注入的风险。
你应该去了解SQL注入的原理,然后进行防患,百度就能找到,然后可以用ORM,一般都对输入做了处理,还能避免直接写SQL(但其实难的地方还得自己写)。
有不理解可以追问。
如何用nodejs搭建web服务器
使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器。
作为一个Web服务器应具备以下几个功能:
1、能显示以.html/.htm结尾的Web页面
2、能直接打开以.js/.css/.json/.text结尾的文件内容
3、显示图片资源
4、自动下载以.apk/.docx/.zip结尾的文件
5、形如http://xxx.com/a/b/ , 则查找b目录下是否有index.html,如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。
6、形如http://xxx.com/a/b, 则作301重定向到http://xxx.com/a/b/ , 这样可以解决内部资源引用错位的问题。
引入需要用到的几个模块:
//http协议模块var http = require(‘http’);//url解析模块var url = require(‘url’);//文件系统模块var fs = require(“fs”);//路径解析模块var path = require(“path”);创建服务并在指定的端口监听:
//创建一个服务var httpServer = http.createServer(this.processRequest.bind(this)); //在指定的端口监听服务httpServer.listen(port,function(){ console.log(“[HttpServer][Start]”,”runing at http://”+ip+”:”+port+”/”); console.timeEnd(“[HttpServer][Start]”);});
在创建服务的时候需要传递一个匿名函数processRequest 对请求进行处理,processRequest接收2个参数,分别是request和response, request对象中包含了请求的所有内容,response是用来设置响应头以及对客户端做出响应操作。
processRequest:function(request,response){ var hasExt = true; var requestUrl = request.url; var pathName = url.parse(requestUrl).pathname; //对请求的路径进行解码,防止中文乱码 pathName = decodeURI(pathName); //如果路径中没有扩展名 if(path.extname(pathName) === ”){ //如果不是以/结尾的,加/并作301重定向 if (pathName.charAt(pathName.length-1) != “/”){ pathName += “/”; var redirect = “http://”+request.headers.host + pathName; response.writeHead(301, { location:redirect }); response.end(); return ; } //添加默认的访问页面,但这个页面不一定存在,后面会处理 pathName += “index.html”; hasExt = false; //标记默认页面是程序自动添加的 } //获取资源文件的相对路径 var filePath = path.join(“http/webroot”,pathName); //获取对应文件的文档类型 var contentType = this.getContentType(filePath); //如果文件名存在 fs.exists(filePath,function(exists){ if(exists){ response.writeHead(200, {“content-type”:contentType}); var stream = fs.createReadStream(filePath,{flags:”r”,encoding:null}); stream.on(“error”, function() { response.writeHead(500,{“content-type”: “text/html”}); response.end(“<h1>500 Server Error</h1>”); }); //返回文件内容 stream.pipe(response); }else { //文件名不存在的情况 if(hasExt){ //如果这个文件不是程序自动添加的,直接返回404 response.writeHead(404, {“content-type”: “text/html”}); response.end(“<h1>404 Not Found</h1>”); }else { //如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表 var html = “<head><meta charset=’utf-8′></head>”; try{ //用户访问目录 var filedir = filePath.substring(0,filePath.lastIndexOf(‘\\’)); //获取用户访问路径下的文件列表 var files = fs.readdirSync(filedir); //将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问 for(var i in files){ var filename = files[i]; html += “<div><a href='”+filename+”‘>”+filename+”</a></div>”; } }catch (e){ html += “<h1>您访问的目录不存在</h1>” } response.writeHead(200, {“content-type”: “text/html”}); response.end(html); } } });}
请求处理函数中有几个重点需要说一下:
对于路径中有中文的,浏览器会自动进行编码(英文不变,中文会变),因此在接收到地址后,需要对地址进行解码,否则最后得到的路径和真实路径不相符,
当访问路径不是以具体的文件结尾,并且不是以/结尾,则需要通过重定向加上/,表示当前目录,否则当前路径下的静态资源会找不到
如果访问路径是目录,则列出该目录下所有文件及文件夹,并可以点击访问,为了让中文目录能正常显示,则还要在header中设置charset=utf-8
核心代码就这么多,大概140行左右,完整的代码已上传到github:https://github.com/git-onepixel/Node,
如果要运行demo,打开cmd切换到根目录,运行node start 即可。
nodejs的错误Cannot read property ‘length’ of undefined,怎么解决啊?我是菜鸟
1、在使用connect-mongo包进行连接mongo数据库时,会报Cannot read property ‘Store’ of undefined的错误
2、出现这个问题的原因是connect-mongo版本的问题,以后大家在遇到类似的问题的时候,先看看相关包目录下的readme文件,里面有这个包的新用法,已经这个版本和以前版本的区别。
3、我们看到connect-mongo目录下的readme文件中有这么一段话:With express:var express = require(‘express’); var MongoStore = require(‘connect-mongo’)(express); app.use(express.session({ secret: settings.cookie_secret, store: new MongoStore({db: settings.db},With connect:var connect = require(‘connect’);var MongoStore = require(‘connect-mongo’)(connect);
4、所以我们需要这样修改程序:将var MongoStore = require(‘connect-mongo’) 换成var MongoStore = require(‘connect-mongo’)(express);且var express = require(‘express’);这句必须在前面。
这样修改问题就解决了。
length未定义,你贴代码看看,这样的问题,你根据错误提示,网上查一查很容易就能解决。
nodejs服务端代码怎么用
下载PHP和MYSQL的安装包,还有Microsoft Visual C++ 2008和安装FastCGI 1.5的组件。安装Microsoft Visual C++ 2008安装FastCGI 1.5,默认下一步安装即可,也是非常简单!配置PHP,修改php.ini文件,配置php首先将php目录中的php.ini-development或php.ini-production 复制到C:\WINDOWS目录中.并将其改名为php.ini php.ini-development 适合开发程式使用(测试用)php.ini-production 拥有较高的安全性设定,则适合上线当产品使用打开php.ini修改以下内容找到; extension_dir = “./”这行,修改为extension_dir = ” D:\php\ext” (注意去掉前面的”;”);date.timezone = 修改为 date.timezone =”asia/shanghai” (注意去掉前面的”;”)short_open_tag 设置为 Onextension=php_mbstring.dll(宽字符支持,推荐选中 去掉前面的”;”)extension=php_gd2.dll(PHP的GD库支持,必选 去掉前面的”;”)extension=php_mysqli.dll (去掉前面的”;”)extension=php_mysql.dll(使PHP支持MySQL,必选 去掉前面的”;”)保存退出修改fcgiext.ini 文件打开 C:\WINDOWS\system32\inetsrv\fcgiext.ini在最后添加以下内容php=PHP[PHP]ExePath=D:\php\PHP\php-cgi.exe(这里的路径是你的php解压后的路径)InstanceMaxRequests=10000ActivityTimeout=600RequestTimeout=600EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000,PHPRC:D:\php\PHP\ (这里的路径是你的php解压后的路径)保存退出打开Internet 信息服务(IIS)管理器鼠标右键点击-默认网站-选择属性-选择主目录(如图)选-目录浏览-然后点击-配置-添加-浏览(C:\WINDOWS\system32\inetsrv\)文件类型选择-所有文件选中fcgiext.dll 打开扩展名:.php全部动作-确定 选择 文档 选项卡添加网站默认文档 index.php (可按需要添加其它文档类型)点击确认,重启IIS在网站目录新建一个测试文件,测试一下php是否配置成功打开记事本输入以下内容<?phpphpinfo();?>另存到网站目录(默认目录C:\Inetpub\wwwroot)文件名为php.php打开IE 在地址档输入 http://localhost/php.php如出现这个页面则说明配置成功.如果想看视频教程可以到原文地址:http://www.zhaosifang.com/thread-11-1-1.html 查看。
如何在阿里云服务器上搭建nodejs
到小鸟云购买云服务器 作为一个穷逼+不熟悉服务器配置的菜鸟。选了最便宜的套餐: CPU: 1核 / 内存: 1024 MB / 带宽:1Mbps / 操作系统: CentOS 7.0 购买环节会设置 ssh 登陆密码,记下密码。
登陆到小鸟云,查看购买的实例。
注意公网 IP,下一步会用到 2. 登陆服务器 sudo ssh 你的服务器ip地址提示输入mac的密码,提示输入服务器密码。 输入后连接成功并显示服务器信息,如下: 登陆服务器后。这里对于我这个 Linux 菜鸟有个大坑………就是 Linux 系统常见的目录结构和文件放置区域。 使用 root 用户身份登陆后,会直接进入到下图 红色箭头标出的 root 目录下。
先 cd .. 跳转到上一层, 再 ls -a ,就可以看到类似下图的目录结构了。3.安装 node 和 mongodbnode – 编译后二进制文件应在/usr/local/bin/node 下 mongodb –安装在/usr/local/mongodb 下下面就一步一步来,首先升级CentOSyum -y update1升级后,跳转到 /usr/local/src , 这个文件夹通常用来存放软件源代码cd /usr/local/src1下载 nodejs 代码,也可以使用scp命令直接上传,因为下载实在太慢了。wget http://nodejs.org/dist/v0.12.5/node-v0.12.5.tar.gz//注*根据最新版本号为准12解压tar -xzvf node-v0.12.5.tar.gz1进入解压后的文件夹cd node-v0.12.51执行配置脚本来进行编译预处理./configure1编译源代码make//注*这个时间可能会很久12当编译完成后,需要使之在系统范围内可用, 编译后的二进制文件将被放置到系统路径,默认情况下,Node二进制文件应该放在/user/local/bin/node文件夹下make install1安装 express 和 forever,这两个模块都推荐 global 安装npm -g install express forever1建立超级链接, 不然 sudo node 时会报 “command not found”sudo ln -s /usr/local/bin/node /usr/bin/nodesudo ln -s /usr/local/lib/node /usr/lib/nodesudo ln -s /usr/local/bin/npm /usr/bin/npmsudo ln -s /usr/local/bin/node-waf /usr/bin/node-wafsudo ln -s /usr/local/bin/forever /usr/bin/forever12345Nodejs到这里就基本安装完成了。
下面来安装mongodb软件安装位置:/usr/local/mongodb 数据存放位置:/var/mongodb/data 日志存放位置:/var/mongodb/logs首先下载安装包cd /usr/localwget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz12解压安装包,重命名文件夹为mongodbtar zxvf mongodb-linux-x86_64-2.6.0.tgzmv mongodb-linux-x86_64-2.6.0 mongodb12创建数据和日志存放目录mkdir /var/mongodbmkdir /var/mongodb/datamkdir /var/mongodb/logs123打开rc.local文件,添加CentOS开机启动项:vim /etc/rc.d/rc.local1将mongodb启动命令追加到本文件中,让mongodb开机自启动:/usr/local/mongodb/bin/mongod –dbpath=/var/mongodb/data –logpath /var/mongodb/logs/log.log -fork12关闭 vim 后,直接手动启动mongodb/usr/local/mongodb/bin/mongod –dbpath=/var/mongodb/data –logpath /var/mongodb/logs/log.log -fork12看到类似的信息,说明已启动成功。我在这里发了个傻,以为26308是port号,导致后面设置port时折腾了好久。其实这里的 forked process 和 port 号是两个东西, 这个是程序本身在Server上的进程。
forked process: 263081启动mongo shellcd /usr/local/mongodb/bin/./mongo12在 mongo shell 中创建管理员及数据库use admin //admin 数据库db.createUser({user: “用户名”,pwd:”登陆密码”,roles:[“userAdminAnyDatabase”] //超级管理员})use databaseFoo //nodeapp 要连接的数据库db.createUser({user: “用户名”,pwd:”登陆密码”,roles:[“readWrite”] //读写权限})12345678910111213到这里 mongodb 基本已经安装设置完成了。具体数据的迁移导入可自行研究。
nodejs怎么安装express
安装 express为了重写我们的HelloWorld,我们需要安装Express模块。Express基于Node.js的一个Web框架,官方网站在这里:http://expressjs.com/。
官网对Express的介绍是:Fast, unopinionated, minimalist web framework for Node.jsExpress很轻巧,通常用来做Web后端的开发。
有一些推荐的书,可以看这里:http://www.expressjs.com.cn/resources/books.html。要安装express模块,直接使用npm命令即可。在命令行环境下不带参数执行npm命令,即可看到npm的帮助信息。安装某个Node.js模块,使用install子命令。
“npm install xxx”会将xxx模块安装到当前路径下,“npm install -g xxx”则将xxx模块安装到当前用户的全局位置。使用“npm helo install”可以查看install子命令的细节。要卸载一个模块,使用“npm uninstall xxx”,假如你是全局安装,则使用“npm uninstall -g xxx”。
在使用npm安装某个模块时,它会自动解决依赖。在命令行环境执行下面的命令来安装express:npm install -g express –registry=https://registry.npm.taobao.org注意,我指定了使用淘宝的镜像,快一些。