Server-Side development with NodeJS, Express, and MongoDB
Câu hỏi của môn
if (!req.headers['x-auth']) {
return next(new Error('Missing auth header'));
}next(); };
app.use(checkAuth);
app.get('/api/data', (req, res) => {
res.json({
data: 'Secret'
}
);
});
app.use((err, req, res, next) => {
res.status(401).json({
error: err.message
}
);
}); app.listen(3000); Assume the request has no `x-auth` header.
app.get('/info', (req, res) => {
res.send('Information');
});
app.listen(3000);Trong Express.js, trình trung gian (middleware) được thực hiện theo một trình tự nhất định. Trình tự này được xác định bởi vị trí của chúng trong mã nguồn. Điều này có nghĩa là trình trung gian được định nghĩa trước sẽ được thực hiện trước trình trung gian được định nghĩa sau. Ví dụ, nếu bạn có một ứng dụng Express.js với hai trình trung gian được định nghĩa như sau:
app.use(express.json());
app.use(logger('dev'));Thì trình trung gian express.json() sẽ được thực hiện trước trình trung gian logger('dev'). Điều này giúp đảm bảo rằng dữ liệu được xử lý một cách nhất quán và chính xác. Do đó, trình tự thực hiện của trình trung gian trong Express.js là dựa trên vị trí của chúng trong mã nguồn, không phải theo thứ tự từ A-Z, dựa trên loại yêu cầu hoặc ngẫu nhiên.
app.static()express.static()static.use()app.serveStatic()class and connecting to the server. const {
MongoClient
}= require('mongodb'); const url = 'mongodb://localhost:27017'; const dbName = 'mydatabase'; const client =
new MongoClient(url);
async function run() {
try {
await client.connect();
console.log("Connected correctly to server");
const db = client.db(dbName);
}
finally {
await client.close();
}
}run().catch(console.dir);
Để kết nối đến một server MongoDB, chúng ta cần sử dụng MongoClient class. Trong đoạn mã này, phần import MongoClient class được thực hiện bởi câu lệnh const { MongoClient } = require('mongodb');. Sau đó, chúng ta cần cung cấp thông tin kết nối đến server MongoDB, bao gồm địa chỉ và tên cơ sở dữ liệu. Câu lệnh const url = 'mongodb://localhost:27017'; được sử dụng để thiết lập địa chỉ server MongoDB, trong khi câu lệnh const dbName = 'mydatabase'; được sử dụng để thiết lập tên cơ sở dữ liệu. Để kết nối đến server MongoDB, chúng ta sử dụng phương thức connect() của MongoClient, được thực hiện bởi câu lệnh await client.connect();. Cuối cùng, để đóng kết nối đến server MongoDB, chúng ta sử dụng phương thức close() của MongoClient, được thực hiện bởi câu lệnh await client.close();.
Model.find()Model.insert()Model.save()new Model().save()Trong Mongoose, phương thức được sử dụng để tạo một tài liệu mới là new Model().save(). Phương thức này cho phép bạn tạo một tài liệu mới và lưu nó vào cơ sở dữ liệu. Phương thức này được sử dụng khi bạn muốn tạo một tài liệu mới và không muốn dựa vào dữ liệu hiện có trong cơ sở dữ liệu. Ví dụ, nếu bạn muốn tạo một tài liệu mới với các trường dữ liệu cụ thể, bạn có thể sử dụng phương thức new Model().save() như sau: const user =
new User({
name: 'John Doe', email: 'john@example.com'
});
user.save((err, user) => {
if (err) console.error(err); else console.log(user);
});
if validation fails? const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/db');const schema =
new mongoose.Schema({
age: {
type: Number, min: 18
}
}); const Model =
mongoose.model('Model', schema);
async function run() {
try {
await Model.create({
age: 17
}
);
}
catch (err) {
console.log('Validation error');
}
}run();
app.use(express.json());
mongoose.connect('mongodb://localhost:27017/test', {
useNewUrlParser: true
}); const userSchema =
new mongoose.Schema({
name: String, email: String
}); const User =
mongoose.model('User', userSchema);
app.post('/api/users', async (req, res) => {
try {
const user = await User.create(req.body); res.status(201).json(user);
}
catch (err) {
res.status(400).json({
error: err.message
}
);
}
});
app.listen(3000);reflinkpopulatejoin