Tôi muốn mô phỏng lỗi 404 trên máy chủ Express / Node của mình. Làm thế nào tôi có thể làm điều đó?
Tôi muốn mô phỏng lỗi 404 trên máy chủ Express / Node của mình. Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Ngày nay có một status
chức năng dành riêng cho việc này trên đối tượng phản hồi. Chỉ cần xích nó ở một nơi nào đó trước khi bạn gọi send
.
res.status(404) // HTTP status 404: NotFound
.send('Not found');
res.status(404).render('error404')
res.status(404);
sẽ không gửi phản hồi AFAIK. Nó cần phải được xâu chuỗi với một cái gì đó, ví dụ res.status(404).end();
hoặc ví dụ thứ hai của bạn, hoặc nó cần phải được theo sau bởi ví dụ res.end();
,res.send('Not found');
res.sendStatus(404)
Thay vì sử dụng res.send(404)
như trong các phiên bản cũ của Express, phương thức mới là:
res.sendStatus(404);
Express sẽ gửi phản hồi 404 rất cơ bản với văn bản "Không tìm thấy":
HTTP/1.1 404 Not Found
X-Powered-By: Express
Vary: Origin
Content-Type: text/plain; charset=utf-8
Content-Length: 9
ETag: W/"9-nR6tc+Z4+i9RpwqTOwvwFw"
Date: Fri, 23 Oct 2015 20:08:19 GMT
Connection: keep-alive
Not Found
res.status(404)
không res.sendStatus(404)
.
res.sendStatus(404)
đúng. Nó tương đương vớires.status(404).send()
res.sendStatus(404);
tương đương với res.status(404).send('Not Found')
Bạn không cần phải mô phỏng nó. Đối số thứ hai để res.send
tôi tin là mã trạng thái. Chỉ cần vượt qua 404 để tranh luận.
Hãy để tôi làm rõ rằng: Theo tài liệu trên expressjs.org , dường như bất kỳ số nào được chuyển đến res.send()
sẽ được hiểu là mã trạng thái. Vì vậy, về mặt kỹ thuật bạn có thể thoát khỏi:
res.send(404);
Chỉnh sửa: xấu của tôi, tôi có nghĩa là res
thay vì req
. Nó sẽ được gọi vào phản hồi
Chỉnh sửa: Kể từ Express 4, send(status)
phương thức đã không được chấp nhận. Nếu bạn đang sử dụng Express 4 trở lên, hãy sử dụng: res.sendStatus(404)
thay vào đó. (Cảm ơn @badcc về mẹo trong các bình luận)
res.send(404, "Could not find ID "+id)
.status(404).send('Not found')
Theo trang web tôi sẽ đăng bên dưới, đó là tất cả cách bạn thiết lập máy chủ của mình. Một ví dụ họ thể hiện là:
var http = require("http");
var url = require("url");
function start(route, handle) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(handle, pathname, response);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
và chức năng tuyến đường của họ:
function route(handle, pathname, response) {
console.log("About to route a request for " + pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname](response);
} else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not found");
response.end();
}
}
exports.route = route;
Đây là một cách. http://www.nodebeginner.org/
Từ một trang web khác, họ tạo một trang và sau đó tải nó. Đây có thể là nhiều hơn những gì bạn đang tìm kiếm.
fs.readFile('www/404.html', function(error2, data) {
response.writeHead(404, {'content-type': 'text/html'});
response.end(data);
});
Từ trang Express , xác định ngoại lệ NotFound và ném nó bất cứ khi nào bạn muốn có trang 404 HOẶC chuyển hướng đến / 404 trong trường hợp dưới đây:
function NotFound(msg){
this.name = 'NotFound';
Error.call(this, msg);
Error.captureStackTrace(this, arguments.callee);
}
NotFound.prototype.__proto__ = Error.prototype;
app.get('/404', function(req, res){
throw new NotFound;
});
app.get('/500', function(req, res){
throw new Error('keyboard cat!');
});
app.use(function(err, res, res, next) { if (err.message.indexOf('NotFound') !== -1) { res.status(400).send('Not found dude'); }; /* else .. etc */ });