node作為JavaScript運行環(huán)境,對Chrome V8引擎進行了封裝。node對一些特殊用例進行了優(yōu)化,提供代替的API,使得V8在非瀏覽器環(huán)境下運行得更好。
V8引擎執(zhí)行JavaScript的速度非???,性能非常好。node.js就是基于ChromeJavaScript運行時建立的平臺,用于方便地搭建響應速度快,易于擴展的網(wǎng)絡應用。
node.js使用了事件驅(qū)動,非阻塞I/O模型而得以輕量和高效,非常適合分布式設備上運行數(shù)據(jù)緊密型的實時應用。
現(xiàn)在大部分前端框架都基于node去開發(fā)啦,這對于node很友好,因為這樣你只要跑一個服務,就可以將后臺、前臺都展現(xiàn)完成。
前一段時間剛來到公司,由于后臺比較忙,他們就讓我拿node去開發(fā)啦。使用node的express框架,開發(fā)感覺很高效,很迅速。
首先將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差不多的作用。
下來就很簡單了我們只要創(chuàng)建一個路由,就可以啟動一個服務
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里面就是對于這個請求返回數(shù)據(jù)的處理
讀數(shù)據(jù) 查數(shù)據(jù)
讀取數(shù)據(jù) 操作的本地文件,方便你們?nèi)タ窗?首先去讀文件 拿到文件數(shù)據(jù)轉(zhuǎn)成JSON 因為這個請求有可能會傳參數(shù)頁面數(shù)據(jù)多少和頁數(shù),所以我用了try catch,拿請求數(shù)據(jù)的話,就是req.body加你的字段,
返回數(shù)據(jù)的話res.json({})很簡單的東西我也就不具體解釋啦
查數(shù)據(jù)的話 使用字符串方法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有值時
//篩選拿到所有數(shù)據(jù)
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]);
}
}
//找到當前頁數(shù)據(jù)
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)]);
}
}
//頁數(shù)賦值
data.PageInfo.RecordCount = filterArr.length;
//數(shù)據(jù)賦值
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: "操作成功"
})
}
});
}
刪數(shù)據(jù)
判斷請求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: "操作成功"
})
});
});
}
改數(shù)據(jù)
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: "操作成功"
})
});
});
}
添加數(shù)據(jù)
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: "操作成功"
})
});
});
}
最后發(fā)送郵件
通過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
});
//開始發(fā)送郵件
server.send({
text: "**設備,**斷網(wǎng),請進行處理。", //郵件內(nèi)容
from: "2542804080@qq.com", //誰發(fā)送的
to: "2542804080@qq.com", //發(fā)送給誰的
subject: "車間設備斷網(wǎng)提醒" //郵件主題
}, function(err, message) {
//回調(diào)函數(shù)
console.log(err || message);
});
}