Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它使得 JavaScript 能够在服务器端运行,极大地扩展了 JavaScript 的应用范围。以下是关于 Node.js 的详细介绍:
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost/blogapp', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义用户模型
const userSchema = new mongoose.Schema({
username: String,
password: String
});
const User = mongoose.model('User', userSchema);
// 定义文章模型
const postSchema = new mongoose.Schema({
title: String,
content: String,
date: { type: Date, default: Date.now }
});
const Post = mongoose.model('Post', postSchema);
app.use(bodyParser.urlencoded({ extended: true }));
// 注册页面
app.get('/register', (req, res) => {
res.send('');
});
app.post('/register', async (req, res) => {
const newUser = new User({
username: req.body.username,
password: req.body.password
});
await newUser.save();
res.redirect('/login');
});
// 登录页面
app.get('/login', (req, res) => {
res.send('');
});
app.post('/login', async (req, res) => {
const user = await User.findOne({ username: req.body.username, password: req.body.password });
if (user) {
res.redirect('/posts');
} else {
res.send('Invalid username or password');
}
});
// 文章列表页面
app.get('/posts', async (req, res) => {
const posts = await Post.find();
let html = 'Blog Posts
';
posts.forEach(post => {
html += `${post.title}${post.content}Posted on
${post.date}
`;
});
res.send(html);
});
// 发布文章页面
app.get('/posts/new', (req, res) => {
res.send('');
});
app.post('/posts/new', async (req, res) => {
const newPost = new Post({
title: req.body.title,
content: req.body.content
});
await newPost.save();
res.redirect('/posts');
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');
const bodyParser = require('koa-bodyparser');
// 模拟数据库数据
let users = [
{ id: 1, name: 'John Doe', email: '[email protected]' },
{ id: 2, name: 'Jane Smith', email: '[email protected]' }
];
app.use(bodyParser());
const router = new Router();
// 获取用户列表
router.get('/users', (ctx) => {
ctx.body = users;
});
// 获取单个用户
router.get('/users/:id', (ctx) => {
const id = parseInt(ctx.params.id);
const user = users.find(u => u.id === id);
if (user) {
ctx.body = user;
} else {
ctx.status = 404;
ctx.body = { message: 'User not found' };
}
});
// 创建新用户
router.post('/users', (ctx) => {
const newUser = {
id: users.length + 1,
name: ctx.request.body.name,
email: ctx.request.body.email
};
users.push(newUser);
ctx.body = newUser;
});
// 更新用户
router.put('/users/:id', (ctx) => {
const id = parseInt(ctx.params.id);
const user = users.find(u => u.id === id);
if (user) {
user.name = ctx.request.body.name;
user.email = ctx.request.body.email;
ctx.body = user;
} else {
ctx.status = 404;
ctx.body = { message: 'User not found' };
}
});
// 删除用户
router.delete('/users/:id', (ctx) => {
const id = parseInt(ctx.params.id);
users = users.filter(u => u.id!== id);
ctx.body = { message: 'User deleted' };
});
app.use(router.routes()).use(router.allowedMethods());
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.use(express.static('public'));
io.on('connection', (socket) => {
console.log('A user connected');
socket.on('join', (username) => {
socket.username = username;
io.emit('message', { username: 'Server', message: `${username} joined the chat` });
});
socket.on('chat message', (msg) => {
io.emit('message', { username: socket.username, message: msg });
});
socket.on('disconnect', () => {
io.emit('message', { username: 'Server', message: `${socket.username} left the chat` });
console.log('A user disconnected');
});
});
const port = 3000;
http.listen(port, () => {
console.log(`Server running on port ${port}`);
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chat App</title>
<style>
body {
font-family: Arial, sans-serif;
}
#chat-container {
width: 400px;
margin: 0 auto;
border: 1px solid #ccc;
padding: 10px;
}
#messages {
height: 300px;
overflow-y: scroll;
border: 1px solid #ccc;
padding: 5px;
}
#input-form {
margin-top: 10px;
}
input[type="text"],
input[type="submit"] {
padding: 5px;
}
</style>
</head>
<body>
<div id="chat-container">
<h1>Chat App</h1>
<div id="messages"></div>
<form id="input-form">
<label for="username">Username:</label><input type="text" id="username"><br>
<label for="message">Message:</label><input type="text" id="message">
<input type="submit" value="Send">
</form>
</div>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
const messagesDiv = document.getElementById('messages');
const inputForm = document.getElementById('input-form');
const usernameInput = document.getElementById('username');
const messageInput = document.getElementById('message');
inputForm.addEventListener('submit', (e) => {
e.preventDefault();
const username = usernameInput.value;
const message = messageInput.value;
if (username && message) {
if (!socket.username) {
socket.emit('join', username);
socket.username = username;
} else {
socket.emit('chat message', message);
}
messageInput.value = '';
}
});
socket.on('message', (data) => {
const messageDiv = document.createElement('div');
messageDiv.textContent = `${data.username}: ${data.message}`;
messagesDiv.appendChild(messageDiv);
});
</script>
</body>
</html>