基础
var http = require('http');
function service(request,response){
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('Hello Nodejs');
}
var server = http.createServer(service);
server.listen(8088);
模块
模块写完方法后,必须放入 exports中 才能被外部代码访问
//module.js
function service(request,response){
response.writeHead(200,{'Content-Type':'text/plain'});
response.end('Hello Nodejs');
}
function sayHello(){
console.log('Hello module');
}
exports.hi = sayHello;
export.service = service;
var http = require('http');
var module = require('/module');
module.hi();
var server = http.createServer(module.service);
server.listen(8088);
路由
看代码路由应该不是nodejs自身的东西,只是一种实现代码实现。
1、requestHandlers.js 定义两个方法,并暴露出来
function listCategory(){
return "lica Category";
}
function listProduct(){
return "list Product";
}
exports.listCategory = listCategory;
exports.listProduct = listProduct;
2、server.js定义服务,
根据pathName传入router 让router发回响应。
handle 里存放的是其他js模块的方法代码
var http = require('http');
var url = require('url');
function start(route,handle){
function onRequest(request,response){
var pathName = url.parse(request.url).pathname;
var html = route(handle,pathName);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(html);
response.end();
}
http.createServer(onRequest).listen(8088);
}
exports.start = start;
3、router.js 判断传入的pathname放入相应的处理。
function route(handler,pathName){
if(typeof handler[pathName] === 'function'){
return handler[pathName]();
}else{
return pathName + 'is not define!';
}
}
exports.route = route;
4、最后 index.js 对上述代码合在一起并使用
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/listCategory"] = requestHandlers.listCategory;
handle["/listProduct"] = requestHandlers.listProduct;
server.start(router.route, handle);
文件读写
使用 fs 模块,
readFileSync
读
writeFile
写
var fs = require("fs");
//读
var html = fs.readFileSync('how2j.html');
//写
fs.writeFile('how2java.html', 'hello from how2java');
Mysql使用
使用mysql模块(系统非自带需要安装mysql模块)
连接数据库
mysql.createConnection(
{
host : "127.0.0.1",
user : "root",
password : "admin",
database : "nodejs"
}
)
//连接
con.connect();
//关闭
con.end()
进行crud
使用 返回的connect对象
query的方法,第一参数放入sql语句,第二参数放入对应参数数组。
var params = [null,name];
var sql = "insert into category_ values (?,?)";
connection.query(sql,params,function (err, result) {
if(err){
console.log("[INSERT ERROR] - ",err.message);
return;
}
console.log("insert success, the generated id is:",result.insertId);
});
//result是返回值,如果使用的查询则
var sql = "SELECT * FROM category_ order by id asc";
connection.query(sql,function (err, results) {
if(err){
console.log("[SELECT ERROR] - ",err.message);
return;
}
if(results)
{
for(var i = 0; i < results.length; i++)
{
console.log("%d\t%s", results[i].id, results[i].name);
}
}
});
Express framework
express 框架不在带,需要安装
开启服务
var server = app.listen(8088);
路由功能代码
app.get('/',
function(req,res){
res.send('Hello from express');
}
);
app.get('/abc',
function(req,res){
res.send('Hello from abc');
}
);
引入静态资源
var path = require('path');
app.use(express.static(path.join(__dirname, 'public')))
上传图片
主要利用参数 reqest 的变量
request里会有 files 数组变量 request.files[0] 取出
其中两个变量 originalname 上传时候文件名
以及 path 临时文件的路径
//需要fs库
app.post('/uploadPhoto', function (req, res) {
//上传临时文件的路径
var uploadedTempFilePath = req.files[0].path;
//读取临时文件
fs.readFile( uploadedTempFilePath, function (err, data) {
//读取成功之后,复制到图片路径
fs.writeFile(imgFile, data, function (err) {
//写成功之后,返回 img元素显示上传之后的图片
res.writeHead(200, {'Content-Type': 'text/html'});
res.end("<img src='img/"+randomFileName+"'/>");
});
});
})