Javascript 未捕获错误节点Js
所以我正在为我的简单应用程序创建一个测试套件 我遇到了一些错误:Javascript 未捕获错误节点Js,javascript,node.js,Javascript,Node.js,所以我正在为我的简单应用程序创建一个测试套件 我遇到了一些错误: Server is running on port 3000 POST /todos 1) Uncaught error outside test suite (node:5030) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: failed to connect to serve
Server is running on port 3000
POST /todos
1) Uncaught error outside test suite
(node:5030) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
2) "before each" hook for "should create a new todo"
0 passing (2s)
2 failing
1) Uncaught error outside test suite:
Uncaught MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
at Pool.<anonymous> (node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:328:35)
at Connection.<anonymous> (node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:274:12)
at Socket.<anonymous> (node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:177:49)
at emitErrorNT (net.js:1278:8)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
2) "before each" hook for "should create a new todo":
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
npm ERR! Test failed. See above for more details.
这是我的server.js
var express = require('express');
var bodyParser = require('body-parser');
var {ObjectID} = require('mongodb');
var {mongoose} = require('./db/mongoose.js');
var {Todo} = require('./models/todo');
var {User} = require('./models/user');
var app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.json());
app.post('/todos', (req, res) =>{
// console.log(req.body);
var todo = new Todo({
text: req.body.text
});
todo.save().then((doc) => {
res.send(doc);
}, (err) => {
res.status(400).send(err);
});
});
// GET /todos/12345
app.get('/todos/:id', (req, res) => {
// req.send(req.params); - test localhost:3000/todos/123 on postman GET
var id = req.params.id;
// Validate id using isValid
if(!ObjectID.isValid(id)){
// Respond 404 and send back and an empty bodyParser
return res.status(404).send();
}
// findById
Todo.findById(id).then((todo) =>{
if(!todo){
return res.status(404).send();
}
res.send({todo});
}).catch((e) =>{
res.status(400).send();
});
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
module.exports = {app};
知道是什么导致了我的错误吗
大多数时候,它是在问它不能把所有的事情都做完
请帮忙
知道是什么导致了我的错误吗
在某个地方,您有一个最终拒绝的承诺,您从未为其连接拒绝处理程序(例如,catch
或then
的第二个参数)。具体位置是调试的问题,但例如以下代码:
beforeEach((done) => {
Todo.remove({}).then(() => {
return Todo.insertMany(todos);
}).then(() => done());
});
…有一个承诺,你永远不会联系拒绝处理者。因此,如果该承诺被拒绝,您将得到未处理的拒绝错误
实际的问题可能不是那个特定的问题(尽管它确实需要一个拒绝处理程序),但如果不是,它将是另一个以相同方式使用的问题
规则是:代码必须要么处理承诺拒绝,要么传递承诺,以便在调用方级别处理它们。如果代码没有传递承诺(例如上面的每个之前的),它必须处理拒绝。尝试添加以下内容:
if(!module.parent){
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
}
你应该解释你在做什么,而不是给他/她密码说试试这个。如果有人说你应该跳桥,那你就不会跳桥,因为这就是解决办法
if(!module.parent){
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
}