- 简单 web 服务器
- 连接 mongodb
- promise
- nodemon 和 pm2
- whistle
简单 web 服务器
// config.js 文件
const config = {
hostname: "127.0.0.1",
port: "3000",
};
exports.config = config;
// myserver.js 文件
const config = require("./config").config; // 引用 config.js 文件
const http = require("http"); // nodejs 内置 http 模块
const fs = require("fs"); // nodejs 内置 fs 文件读写模块
const qs = require("querystring"); // nodejs 内置 qs 查询串模块
const ejs = require("ejs"); // ejs 模板实现表单页面,安装 npm install ejs
var template = fs.readFileSync(__dirname + "/forum.ejs", "utf-8"); // 读 ejs 文件
var posts = [];
const hostname = "127.0.0.1"; // 如无 config.js 文件则统一配置
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
switch (
req.url // req.url 返回客户端请求的 url
) {
case "/":
res.end("helo world.");
break;
case "/home":
res.end("Welcome to my homepage!");
break;
default:
res.end("NotFound!");
}
// 读 html 文件并返回
fs.readFile(__dirname + "/index.html", "utf-8", function (err, data) {
if (err) {
res.setHeader("Content-Type", "text/plain");
res.statusCode = 404;
res.end("Not Founded.");
} else {
res.setHeader("Content-Type", "text/html");
res.statusCode = 200;
res.end(data);
}
});
// 表单提交
if (req.method === "POST") {
req.data = "";
// 表单数据收集
req.on("readable", function () {
var chr = req.read();
if (chr) req.data += chr;
});
// 表单处理
req.on("end", function () {
var query = qs.parse(req.data);
posts.push(query.content);
showForm(posts, res); // 表单显示
});
} else showForm(posts, res);
});
function showForm(p_posts, res) {
var data = ejs.render(template, { posts: p_posts }); // ejs 着色
res.setHeader("Content-Type", "text/html");
res.statusCode = 200;
res.end(data);
}
// 打开监听
server.listen(config.port, config.hostname, () => {
console.log("Server running at http://${config.hostname}:${config.port}/");
});
<!-- forum.ejs 文件-->
<form action="" method="post">
<!-- action="" 向自身提交 -->
<input type="text" name="content" id="content" />
<input type="submit" value="提交" />
<ul>
<!-- <% for (var i = 0; i < posts.length; i++) { %>
<li><%= posts[i] %></li>
<% } %> -->
</ul>
</form>
连接 mongodb
// mongofunc.js 文件,安装 npm install mongodb [--save],自动生成 mongofunc.js 文件
const MongoClient = require("mongodb").MongoClient; // mongodb 客户端
const assert = require("assert"); // nodejs 内置 assert 断言模块
const url = "mongodb://192.168.11.18:27017";
const dbName = "komablog";
MongoClient.connect(url, function (err, client) {
assert.equal(null, err);
console.log("Connected successfully to server");
const db = client.db(dbName); // 打开数据库
db.collection("posts", function (err, collection) {
var list = [
{ title: "我爱玩马里奥", tag: "game" },
{ title: "我喜欢Nodejs编程", tag: "it" },
];
// 插入 MongoDB 文档
collection.insert(list, function (err, result) {
assert.equal(null, err);
client.close();
});
// 读 MongoDB 文档
collection.find({ tag: "game" }).toArray(function (err, docs) {
assert.equal(null, err);
console.log(docs);
client.close();
});
});
});
promise
function dbupd(sql, done) {
setTimeout(() => done(sql + " upd ok."), 800);
}
// 回调地狱
dbupd("1.sql1", (result) => {
console.log(result);
dbupd("2.sql2", (result) => {
console.log(result);
dbupd("3.sql3", (result) => {
console.log(result);
});
});
});
function dbupAsync(sql) {
// Promise 异步方法
// 成功调用 resolve(),失败调用 reject()
const p = new Promise((resolve, reject) => {
setTimeout(() => {
console.log(sql + " upd ok.");
resolve(sql + ".ok");
}, 800);
});
return p;
}
// Promise 类(p 常量).then() 可调用 Promise 异步方法
dbupAsync("1.sql1")
.then(() => dbupAsync("2.sql2"))
.then(() => dbupAsync("3.sql3"));
// async/await 可调用 Promise 异步方法
async function upAllDB() {
const result1 = await dbupAsync("1.sql1");
const result2 = await dbupAsync("2.sql2");
const result3 = await dbupAsync("3.sql3");
console.log(result1, result2, result3);
}
upAllDB();
nodemon 和 pm2
$ sudo npm install nodemon -g # 热更新 node,nodemon server.js
$ sudo npm install pm2 -g # 监控 node,生产环境服务器部署,pm2 start server.js
$ pm2 list
$ pm2 stop/restart/reload/delete 0 # 0 为进程号,可换进程名
$ pm2 start server-pm2.json # server-pm2.json 文件为 pm2 配置,内容如下
{
"name": "myweb",
"script": "server.js",
"port": 8080,
"env": { "NODE_ENV": "production" },
"options": [""]
}
whistle
$ sudo npm install whistle -g
$ w2 help/start/restart/stop # 需下载 https 证书
网友评论