我刚刚使用Express启动了一个项目,我对node.js一无所知,甚至在Javascript中也没有。我想知道什么是投掷和捕获错误的正确方法,以便它们正确显示,并且我不会复制太多代码。我在app.js中想到了这段代码:
<ul>
<% @users.each do |user| %>
<% if current_user == user || current_user.friends.include?(user) %>
<li><%= link_to user.email, user_path(user) %></li>
<% else %>
<% if current_user.friend_requests.pluck(:friend_id).include? user.id %>
<li><%= link_to user.email, user_path(user) %>
| Pending Request</li>
<% else %>
<li><%= link_to user.email, user_path(user) %> |
<%= link_to "Add Friend", friend_requests_path(friend_id: user.id), method: :post %>
</li>
<% end %>
<% end %>
<% end %>
</ul>
就像一个巨大的捕获,它将拦截我将在控制器中抛出的所有错误。但我真的不知道如何让它发挥作用。例如,让我们在users.js中使用这段代码:
placesClient = GMSPlacesClient.sharedClient()
resultsViewController = GMSAutocompleteResultsViewController()
resultsViewController?.delegate = self
searchController = UISearchController(searchResultsController: resultsViewController)
searchController?.searchResultsUpdater = resultsViewController
searchController?.searchBar.sizeThatFits(CGSize(width: 600, height: 44.0 ))
self.definesPresentationContext = true
searchController?.searchBar.frame = (CGRectMake(0, 100,600, 44.0))
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: (searchController?.searchBar)!)
// Keep the navigation bar visible.
searchController?.hidesNavigationBarDuringPresentation = false
searchController?.modalPresentationStyle = UIModalPresentationStyle.Popover
任何帮助/提示都会受到赞赏,我会在此期间继续查看论坛和内容。
答案 0 :(得分:1)
Express使用一系列中间件来处理请求。如果路由匹配并定义了路由,它将处理它。否则,你可以把&#39; / 404&#39;导入所有路由后最后路由。当没有找到路线时,它会自动到达那里。否则,如果您不想发送回复,可以使用next(),以便它转移到下一个中间件,最终转移到&#39; / 404&#39;中间件。
/* GET users listing. */
router.get('/', function(req, res, next) {
connection.query('SELECT id, name FROM user', function(err, rows, fields) {
if (err) {
return res.status(502).json({message:'db error'});
};
res.render('users', {
title: 'Users',
userList: rows
});
});
});
答案 1 :(得分:1)
谢谢大家的回答。我正在寻找(和找到)的是 next(错误)函数,用于将控制传递给位于app.js中的错误处理程序(参见http://expressjs.com/en/guide/routing.html以获取更多详细信息)。
答案 2 :(得分:0)
在Express中,每个路由处理程序都会传递一个'res'参数,该参数用于向客户端提供响应。创建具有特定代码,代码错误和空体的响应的示例用法
router.get('/', function(req, res, next) {
res.status(401, "Authentication mismatch").json({});
});
您也可以使用send()来发送纯文本,而不是json()。
答案 3 :(得分:0)
您可以使用statusCode提供相关消息,例如
/* GET users listing. */
router.get('/', function(req, res, next) {
connection.query('SELECT id, name FROM user', function(err, rows, fields) {
if (err){
res.status(500).send("Something is not right");
};
//if you get rows of array type, then you can do this for empty records
else if(rows.length===0){
res.status(204).send('No records found!')
}else{
res.render('users', {
title: 'Users',
userList: rows
});
}
});
});