node作为JavaScript运行环境,对Chrome V8引擎进行了封装。node对一些特殊用例进行了优化,提供代替的API,使得V8在非浏览器环境下运行得更好。
V8引擎执行JavaScript的速度非常快,性能非常好。node.js就是基于ChromeJavaScript运行时建立的平台,用于方便地搭建响应速度快,易于扩展的网络应用。
node.js使用了事件驱动,非阻塞I/O模型而得以轻量和高效,非常适合分布式设备上运行数据紧密型的实时应用。
现在大部分前端框架都基于node去开发啦,这对于node很友好,因为这样你只要跑一个服务,就可以将后台、前台都展现完成。
前一段时间刚来到公司,由于后台比较忙,他们就让我拿node去开发啦。使用node的express框架,开发感觉很高效,很迅速。
首先将express引入全局
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var config = require('./routes/config.js')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
//app.set('views', path.join(__dirname, 'Module'));
app.set('view engine', 'jade');
app.use(session({
cookieName: 'session',
secret: 'someRandomSecret!',
duration: 24 * 60 * 60 * 1000,
activeDuration: 1000 * 60 * 5
}));
app.use(logger('dev'));
app.use(bodyParser.json());
当然我还引入了一些其他东西,并将它use注入全局,就和vue差不多的作用。
下来就很简单了我们只要创建一个路由,就可以启动一个服务
var StateTime = require('../controller/StateTime.js');
module.exports = function(app) {
app.get('/StateTime', StateTime.StateTime);
app.post('/StateTime/StateList', StateTime.StateList);
app.post('/StateTime/DeleteStateList', StateTime.DeleteStateList);
app.post('/StateTime/AddStateList', StateTime.AddStateList);
app.post('/StateTime/UpdataStateList', StateTime.UpdataStateList);
app.get('/StateTime/SendEmail', StateTime.SendEmail)
}
get就是get请求,post就是post请求。很简单。还引入来了别的js,这个js里面就是对于这个请求返回数据的处理
读数据 查数据
读取数据 操作的本地文件,方便你们去看吧
首先去读文件 拿到文件数据转成JSON 因为这个请求有可能会传参数页面数据多少和页数,所以我用了try catch,拿请求数据的话,就是req.body加你的字段,
返回数据的话res.json({})很简单的东西我也就不具体解释啦
查数据的话 使用字符串方法indexOf方法检索字符串去判断。
exports.StateList = function(req, res) {
fs.readFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), 'utf8', function(err, data) {
if (err) console.log(err);
var filterArr = [];
var pageArr = [];
data = JSON.parse(data)
try {
//当input有值时
//筛选拿到所有数据
for (var i = 0; i < data.List.length; i++) {
if (data.List[i].MAC_NAME.indexOf(req.body.filter.filters) != -1) {
filterArr.push(data.List[i]);
}
}
//找到当前页数据
for (var i = 0; i < req.body.pageSize; i++) {
if (filterArr[i + ((req.body.page - 1) * req.body.pageSize)] != null) {
pageArr.push(filterArr[i + ((req.body.page - 1) * req.body.pageSize)]);
}
}
//页数赋值
data.PageInfo.RecordCount = filterArr.length;
//数据赋值
data.List = pageArr;
res.json({
Data: data,
Status: 0,
Message: "操作成功"
})
} catch (error) {
for (var i = 0; i < req.body.pageSize; i++) {
if (data.List[i + ((req.body.page - 1) * req.body.pageSize)] != null) {
pageArr.push(data.List[i + ((req.body.page - 1) * req.body.pageSize)]);
}
}
data.List = pageArr;
res.json({
Data: data,
Status: 0,
Message: "操作成功"
})
}
});
}
删数据
判断请求id和本地id一样的给splice掉,重新写入这个文件。
exports.DeleteStateList = function(req, res) {
fs.readFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), 'utf8', function(err, data) {
if (err) console.log(err);
data = JSON.parse(data);
for (var i = 0; i < data.List.length; i++) {
if (req.body.applayId == data.List[i].APPLAY_NBR) {
data.List.splice(i, 1);
}
}
data.PageInfo.RecordCount--;
fs.writeFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), JSON.stringify(data), function(err) {
if (err) console.error(err);
res.json({
Data: data,
Status: 0,
Message: "操作成功"
})
});
});
}
改数据
exports.UpdataStateList = function(req, res) {
fs.readFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), 'utf8', function(err, data) {
if (err) console.log(err);
data = JSON.parse(data);
for (var i = 0; i < data.List.length; i++) {
if (req.body.applayId == data.List[i].APPLAY_NBR) {
data.List[i] = {
"APPLAY_NBR": req.body.applayId,
"START_TIME": req.body.START_TIME,
"START_END": req.body.START_END,
"MODE": req.body.MODE,
"STATE": req.body.STATE,
"MAC_NAME": req.body.MAC_NAME,
"CONTACT": req.body.CONTACT
};
}
}
fs.writeFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), JSON.stringify(data), function(err) {
if (err) console.error(err);
res.json({
Data: data,
Status: 0,
Message: "操作成功"
})
});
});
}
添加数据
exports.AddStateList = function(req, res) {
fs.readFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), 'utf8', function(err, data) {
if (err) console.log(err);
data = JSON.parse(data);
data.List.push({
"APPLAY_NBR": new Date().getTime() + data.List.length + 1,
"START_TIME": req.body.START_TIME,
"START_END": req.body.START_END,
"MODE": req.body.MODE,
"STATE": req.body.STATE,
"MAC_NAME": req.body.MAC_NAME,
"CONTACT": req.body.CONTACT
})
data.PageInfo.RecordCount++;
fs.writeFile(path.resolve('/mda_new_git/MDA_NODE/Module/StateTime/StateList.json'), JSON.stringify(data), function(err) {
if (err) console.error(err);
res.json({
Data: data,
Status: 0,
Message: "操作成功"
})
});
});
}
最后发送邮件
通过npm Install emailjs
var email = require("emailjs");
exports.SendEmail = function(req, res) {
var server = email.server.connect({
user: "2542804080@qq.com", // 你的QQ用户
password: "****************", // 注意,不是QQ密码,登录QQ邮箱 设置 账户 POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 里面的开启服务 IMAP/SMTP服务这个服务打开会返回一个码
host: "smtp.qq.com", // 主机,不改
ssl: true // 使用ssl
});
//开始发送邮件
server.send({
text: "**设备,**断网,请进行处理。", //邮件内容
from: "2542804080@qq.com", //谁发送的
to: "2542804080@qq.com", //发送给谁的
subject: "车间设备断网提醒" //邮件主题
}, function(err, message) {
//回调函数
console.log(err || message);
});
}