Nodejs在企业中多被作为前后端分离的中间层,今天讲解Nodejs 搭建简单服务器,为前端,或者移动端提供接口数据,适合前端开发,或者不想搭建复杂服务器的移动开发者,过程十分简单。
因为我也只看了一天,所以使用的webStorm的node+express模板创建项目,其实完全可以创建个简单项目,然后单独下载express模块和ejs模块进行代码编辑,过程类似。至于nodejs环境配置,webstorm配置,各位辛苦找找,后面我会补上。
新建项目
也可以选择jade模板,原来经常写jsp,所以我就选了ejs模板,容易上手。
webStorm 可以利用这个js文件启动服务, www文件可以修改端口,app.js可以配置路由,引入路由。
Nodejs页面路由配置:
Nodejs的ejsView.js文件:
var express = require('express');
var router = express.Router();
var demo = {"name":"xiaoming","age":22};
router.get('/',function (req, res, next) {
res.render("ejsView",demo);
});
module.exports = router;
获取Router,res.render中ejsView是ejs模板页面,最终利用module.exports 导出,可供外界调用。
ejsView 模板代码:
<!DOCTYPE html>
<html>
<head>
<title>demo</title>
</head>
<body>
<h1>姓名:<%= name %></h1>
<p>年龄: <%= age %></p>
</body>
</html>
App.js中引入方式:
var demoRouter = require('./routes/ejsView');
app.use('/demo1',demoRouter);
启动服务就可以在浏览器中访问ejsView模板对应的界面了。
链接数据库
Nodejs简单的请求mysql数据库方式,首先打开mysql数据库服务,js文件中引入mysql模块,需要利用npm下载mysql模块。
var express = require('express');
var mysql = require('mysql');
var router = express.Router();
var demo = {data:null};
router.get('/',function (req, res, next) {
var con = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root123456',
database : 'user'
});
try {
con.connect();
var sql = 'select * from usertab';
con.query(sql, function (error, results, fields) {
console.log(results);
var demojson = {"data":results};
res.render("demo3",demojson);
//res.send(demojson);
if (error) res.end();
});
}catch (error){
console.log('The solution is:3333 '+error);
}finally {
con.end();
}
});
module.exports = router;
demo3.js
var express = require('express');
var mysql = require('mysql');
var router = express.Router();
var demo = {data:null};
router.get('/',function (req, res, next) {
var con = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root123456',
database : 'user'
});
try {
con.connect();
var sql = 'select * from usertab';
con.query(sql, function (error, results, fields) {
console.log(results);
var demojson = {"data":results};
res.render("demo3",demojson);
//res.send(demojson);
if (error) res.end();
});
}catch (error){
console.log('The solution is:3333 '+error);
}finally {
con.end();
}
});
module.exports = router;
上面说的是mysql,下面讲解MongoDB数据库的增删改查(大体类似,我就简单写了):
var express = require('express');
var router = express.Router();
var mongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/mongodbtesst1';
router.get('/mongodbadd',function (req, res, next) {
mongoClient.connect(url,function(err,db){
if (err)throw err;
console.log("数据库已建立");
var dbase = db.db("runoob");
dbase.createCollection('user', function (err, res2) {
if (err) throw err;
console.log("创建集合!");
});
dbase.collection('user').insertOne({'name':'xiaoming','age':22},function (err,res3) {
res.send(res3);
db.close();
});
});
});
router.get('/mongodbdelete',function (req, res, next) {
mongoClient.connect(url,function(err,db){
if (err)throw err;
console.log("数据库已建立");
var dbase = db.db("runoob");
dbase.collection('user').deleteOne({'name':'xiaoming','age':22},function (err,res3) {
res.send(res3);
db.close();
});
});
});
router.get('/mongodbadd',function (req, res, next) {
mongoClient.connect(url,function(err,db){
if (err)throw err;
console.log("数据库已建立");
var dbase = db.db("runoob");
dbase.collection('user').insertOne({'name':'xiaoming','age':22},function (err,res3) {
res.send(res3);
db.close();
});
});
});
router.get('/mongodbfind',function (req, res, next) {
mongoClient.connect(url,function(err,db){
if (err)throw err;
console.log("数据库已建立");
var dbase = db.db("runoob");
dbase.collection('user').find({}).toArray(function (err,res3) {
res.send(res3);
db.close();
});
});
});
module.exports = router;
想要输出json格式直接利用res.send输出,就可以为client端提供简单接口了。
类似nginx的代理配置方式:
app.use("/proxy",proxy({
target:'http://localhost:8080/dynamicdemo/',
changeOrigin: true, // proxy websockets
pathRewrite: {
'^/proxy/bushu' : '/bushu/eldemo.jsp', // rewrite path
'^/proxy/demo' : '/demo/demo1.jsp', // rewrite path
'^/proxy/upload' : '/upload/upload.jsp', // rewrite path
'^/pagenav/upload' : '/pagenav/demo.jsp', // rewrite path
}
}));
//可以利用当前网址,访问dynamicdemo的内容,如果本地测试,需要设置host。