Nodejs 使用Express构建网站时遇到的各种坑,分享经验,先做目录,慢慢写
Nodejs 使用Express构建网站时遇到的各种坑,分享经验,先做目录,慢慢写
-
nginx代码转发nodejs请求
-
phantomjs抓取的时候出现死进程问题
顺便贴一下网址,是做的一个简单的游戏
微信内置的,所以用微信打开会好一些,还没有完全处理完,事件都是触摸的,所以电脑上面实际上没法玩
2 回复
Node.js 使用 Express 构建网站时遇到的各种坑,分享经验
目录
-
守护进程问题
- 使用
forever
或编写 shell 脚本实现守护进程。 - 示例代码:
#!/bin/bash while true; do node app.js sleep 1 done
- 使用
-
MySQL 连接问题
- 解决连接断开、连接数不释放的问题。
- 示例代码:
const mysql = require('mysql'); const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'mydb' }); pool.getConnection((err, connection) => { if (err) throw err; connection.query('SELECT * FROM users', (err, results) => { if (err) throw err; console.log(results); connection.release(); }); });
-
利用多核处理高并发问题
- 使用
cluster
模块来处理高并发。 - 示例代码:
const cluster = require('cluster'); const http = require('http'); if (cluster.isMaster) { const numCPUs = require('os').cpus().length; for (let i = 0; i < numCPUs; i++) { cluster.fork(); } } else { http.createServer((req, res) => { res.writeHead(200); res.end('Hello World!'); }).listen(8000); }
- 使用
-
模板引擎的选择问题
- 比较 EJS 和 Pug 模板引擎。
- 示例代码(使用 EJS):
const express = require('express'); const ejs = require('ejs'); const app = express(); app.set('view engine', 'ejs'); app.get('/', (req, res) => { res.render('index', { title: 'Home Page' }); }); app.listen(3000);
-
Nginx 代码转发 Node.js 请求
- 配置 Nginx 将请求转发到 Node.js 应用。
- 示例配置:
server { listen 80; server_name example.com; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
-
PhantomJS 抓取时出现死进程问题
- 如何处理 PhantomJS 在抓取过程中出现的死进程问题。
- 示例代码:
const phantom = require('phantom'); async function run() { let instance; try { instance = await phantom.create(); const page = await instance.createPage(); const status = await page.open('http://example.com'); console.log(status); const content = await page.property('content'); console.log(content); } finally { if (instance) await instance.exit(); } } run();
游戏链接
-
疯狂猜电影小游戏:疯狂猜电影小游戏
这是一个微信内置的小游戏,目前还在开发中。游戏中的所有事件都基于触摸操作,因此在电脑上可能无法正常运行。
希望这些示例代码和解释能帮助你更好地理解和解决这些问题。
在使用 Node.js 和 Express 构建网站的过程中,确实会遇到一些常见的问题。这里我将列出一些常见的坑,并提供一些解决方案和示例代码。
目录
-
守护进程问题
- 使用
forever
或者编写 shell 脚本以确保 Node.js 应用程序持续运行。
- 使用
-
MySQL 连接问题
- 处理 MySQL 连接断开和连接数不释放的问题。
-
多核处理高并发问题
- 如何利用 Node.js 的多核特性来处理高并发请求。
-
模板引擎的选择
- 比较不同模板引擎的优缺点,并选择合适的模板引擎。
-
Nginx 配置
- 如何配置 Nginx 来转发 Node.js 请求。
-
PhantomJS 死进程问题
- 如何解决使用 PhantomJS 抓取页面时出现的死进程问题。
示例代码
1. 守护进程问题
使用 forever
工具来守护 Node.js 进程:
# 安装 forever
npm install -g forever
# 启动应用
forever start app.js
# 查看日志
forever logs
2. MySQL 连接问题
使用 mysql2
库,并设置连接池来管理数据库连接:
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
async function queryDatabase(sql) {
const [rows] = await pool.query(sql);
return rows;
}
module.exports = { queryDatabase };
3. 多核处理高并发问题
使用 cluster
模块来利用多核 CPU:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
4. 模板引擎的选择
使用 EJS 模板引擎作为示例:
const express = require('express');
const ejs = require('ejs');
const app = express();
app.set('view engine', 'ejs');
app.get('/', (req, res) => {
res.render('index', { title: 'Homepage' });
});
app.listen(3000, () => {
console.log('App listening on port 3000!');
});
以上就是关于使用 Node.js 和 Express 构建网站时的一些常见问题及解决方案的总结。希望对你有所帮助!