node.js创建项目
node开始之路
全局下载nodemon进行热更新
npm install --global nodemon
创建node项目
mkdir +项目名称
到项目路径中
cd +项目名称
初始化
npm init -y
下载express包
npm install -S express
创建app.js文件
并在中写入
// 0. 安装
// 1. 引包
var express = require('express')
// 2. 创建你服务器应用程序
// 也就是原来的 http.createServer
var app = express()
app.get('/about', function (req, res) {
// 在 Express 中可以直接 req.query 来获取查询字符串参数
console.log(req.query)
res.send('你好,我是 Express!')
})
// 相当于 server.listen
app.listen(3000, function () {
console.log('app is running at port 3000.')
})
通过node app.js
运行代码
或者通过nodemon app.js
运行热更新代码
下载模块引擎(可以使用 response.render('new.html')
渲染html页面)
npm install --save art-template
npm install --save express-art-template
在app.js中 加入代码
app.engine('art', require('express-art-template'));
node项目增删改的完成
var express = require('express')
var app = express()
app.use(express.json())
var bodyParser = require('body-parser')
// 配置模板引擎和 body-parser 一定要在 app.use(router) 挂载路由之前
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
// 配置模板引擎
app.engine('html', require('express-art-template'));
//引包
const mongoose = require('mongoose');
//创建数据库连接
mongoose.connect('mongodb://localhost/students', {useNewUrlParser: true, useUnifiedTopology: true});
//创建和实例化数据库表
var studentSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
age: {
type: Number,
required: true
},
gender: {
type: String,
required: true
},
hobbies: {
type: String,
required: true
}
})
//导出数据库对象
const Student = mongoose.model('Student',studentSchema)
//显示首页,学生列表
app.get('/index', function (require,response) {
//Student.find等这些都是mongoose的API
Student.find(function(err,data) {
if(err) {
return response.status(500).send('Server error.')
}
response.render('index.html',{
students:data
})
})
})
//渲染学生添加页面
app.get('/new', function (require,response) {
response.render('new.html')
// console.log("收到表单的提交!!!")
})
//添加页面提交
app.post('/new', function (req,res) {
// console.log(req.body)
Student.create(req.body)
//重定向跳转路由
res.redirect('/index')
})
//删除学生
app.get('/delete', function (req,res) {
var id = req.query.id
//console.log(id)
Student.findByIdAndDelete(id, function(err) {
if(err) {
return res.status(500).send('Server error.')
}
res.redirect('/index')
})
})
//修改学生
app.get('/edit', function (req,res) {
var id = req.query.id
Student.findById(id, function(err,data) {
if(err) {
return response.status(500).send('Server error.')
}
// console.log(data)
res.render('edit.html', {
student: data
})
})
})
//修改提交信息
app.post('/edit', function(req,res) {
var student = req.body
Student.findByIdAndUpdate(student.id,student, function(err) {
if(err) {
return res.status(500).send('Server error.')
}
res.redirect('/index')
})
})
//启动端口
app.listen(3000, function () {
console.log('http://localhost:3000/index.')
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了