首页 > 解决方案 > nodemon ,应用程序崩溃,在启动前等待文件更改

问题描述

我正在尝试使用 node.js 和 mongodb 制作一个待办事项应用程序来存储用户输入到数据库的信息,但我不确定发生了什么。当我尝试运行 nodemon 时,我不断收到此错误。我是 node.js 的新手,所以也许我错过了什么?下面的代码是 server.js。

let express = require('express')
let mongodb = require('mongodb')

let app = express()
let db 

let connectionString = 'mongodb+srv://todoAppUser:Se@ttle1@cluster0.iod2u.mongodb.net/ToDoApp?retryWrites=true&w=majority'
mongodb.connect(connectionString, {useNewUrlParser: true, useUnifiedTopology: true}, function(err, client){
  db = client.db()
  app.listen(3000)
})

app.use(express.urlencoded({extended: false}))

app.get('/', function(req, res) {
  db.collection('items').find().toArray(function(err.items){
    console.log('items')
  })
    res.send(`<!DOCTYPE html>
    <html>
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Simple To-Do App</title>
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
    </head>
    <body>
      <div class="container">
        <h1 class="display-4 text-center py-1">To-Do App</h1>
        
        <div class="jumbotron p-3 shadow-sm">
          <form action="/create-item" method="POST" >
            <div class="d-flex align-items-center">
              <input name="item" autofocus autocomplete="off" class="form-control mr-3" type="text" style="flex: 1;">
              <button class="btn btn-primary">Add New Item</button>
            </div>
          </form>
        </div>
        
        <ul class="list-group pb-5">
          <li class="list-group-item list-group-item-action d-flex align-items-center justify-content-between">
            <span class="item-text">Fake example item #1</span>
            <div>
              <button class="edit-me btn btn-secondary btn-sm mr-1">Edit</button>
              <button class="delete-me btn btn-danger btn-sm">Delete</button>
            </div>
          </li>
          <li class="list-group-item list-group-item-action d-flex align-items-center justify-content-between">
            <span class="item-text">Fake example item #2</span>
            <div>
              <button class="edit-me btn btn-secondary btn-sm mr-1">Edit</button>
              <button class="delete-me btn btn-danger btn-sm">Delete</button>
            </div>
          </li>
          <li class="list-group-item list-group-item-action d-flex align-items-center justify-content-between">
            <span class="item-text">Fake example item #3</span>
            <div>
              <button class="edit-me btn btn-secondary btn-sm mr-1">Edit</button>
              <button class="delete-me btn btn-danger btn-sm">Delete</button>
            </div>
          </li>
        </ul>
        
      </div>
      
    </body>
    </html>`)
})

app.post('/create-item', function(req, res){
    db.collection('items').insertOne({text: req.body.item},
      function(){
        res.send("thanks for submitting the form")
      })
})

这是package.json,nodemon文件在哪里

{
  "name": "todo-app",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "watch": "nodemon server",
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "mongodb": "^3.6.4",
    "nodemon": "^2.0.7"
  }
}


这是终端中的错误。

npm run watch

> todo-app@1.0.0 watch C:\Users\jasmi\OneDrive\Documents\todo-app     
> nodemon server

[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node server.js`
C:\Users\jasmi\OneDrive\Documents\todo-app\server.js:16
  db.collection('items').find().toArray(function(err.items){
                                                    ^

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:979:16)
    at Module._compile (internal/modules/cjs/loader.js:1027:27)       
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)  
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47
[nodemon] app crashed - waiting for file changes before starting...  

标签: javascriptnode.jsmongodbexpressnodemon

解决方案


在 toArray 函数中,有 2 个参数,第一个是错误 (err),第二个是结果数组 (items)。您必须替换“。” 使用 ',' 以逗号分隔两个参数。

这是您的 app.get 中正确的代码片段:

db.collection('items').find().toArray(function(err,items){
  if (err){
    return err;
  }
  else{
    console.log('items',items);
  }
})

这样做,你就可以走了。


推荐阅读