我将NextJS与typescript、mongo Atlas、mongoose、node和express一起使用.

运行 node 页/服务器时,我遇到以下错误:

从"express "进口express ^^^^^^

SyntaxError:无法在模块外使用import语句

这是我的服务器.js代码:

import express from 'express';
import { connect, connection } from 'mongoose';
import morgan from 'morgan';
import path from 'path';
const app = express();
const PORT = process.env.PORT || 8080;
//Success
   import routes from './routes/api.tsx';

const MONGODB_URI = 'xxx';

// const routes=require('./routes/api')
connect(MONGODB_URI ||'mongodb://localhost/success', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

connection.on('connected', () => {
    console.log('Mongoose is connected');
});

const newBlogPost = new BlogPost(data); //instance of the model

app.use(morgan('tiny'));
app.use('/',routes)

app.listen(PORT, console.log(`Server is starting at ${PORT}`));

package.json file

{
  "name": "la-sheild",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "next",
    "build": "next build",
    "start": "babel-node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/express": "^4.17.2",
    "@types/mongoose": "^5.7.1",
    "axios": "^0.19.2",
    "concurrently": "^5.1.0",
    "express": "^4.17.1",
    "mongoose": "^5.9.1",
    "morgan": "^1.9.1",
    "next": "^9.2.2",
    "node": "^13.8.0",
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },
  "devDependencies": {
    "@babel/core": "^7.8.4",
    "@babel/preset-env": "^7.8.4",
    "@babel/register": "^7.8.3",
    "@types/node": "^13.7.4",
    "@types/react": "^16.9.21",
    "babel-cli": "^6.26.0",
    "typescript": "^3.7.5"
  },
  "proxy": "http://localhost:8080"
}

推荐答案

从 node v12开始,您可以在package.json中使用.mjs扩展名或set "type": "module".

您需要使用--experimental-modules标志运行node.

node --experimental-modules server.mjs

你可以查SO link

或者可以在项目的根目录中创建.babelrc个文件.

{
    "presets": ["env"]
}

使用安装babel-preset-env

npm install babel-preset-env
npm install babel-cli -g

# OR

yarn add babel-preset-env
yarn global add babel-cli

现在,转到server.js文件所在的文件夹,然后

运行时使用:

babel-node fileName.js

或者,您可以使用npm start运行,方法是向package.json文件中添加以下代码:

"scripts": {
    "start": "babel-node server.js"
}

接下来有一个关于设置的教程link.js和一个定制的Express Server+Typescript在一个媒体上,这将对你非常有帮助.

Mongodb相关问答推荐

MongoDB(Mongoose)条件判断没有像我预期的那样工作

MongoDB:如何通过增量向量递增整数向量

在提供的文档(_Id)之后和之前,是否有一个Mongo操作来获取已排序(和/或过滤)集合中的文档计数?

除非满足某个条件,否则Mongo是否按日期排序?

为什么我的Mongoose更新找不到匹配?

使用特定关键字和邻近度进行查询和过滤

数组过滤器 MongoDB

如何获取mongodb ObjectId的值?

使用golang的MongoDB错误无法访问服务器

Pymongo API TypeError: Unhashable dict

如何在 Mongoose 中定义一个通用的嵌套对象

oplog 在独立 mongod 上启用,不适用于副本集

为什么不建议在 MongoDB 中使用服务器端存储函数?

如何使用原子操作在一个文档中切换布尔字段?

在 mongodb 聚合框架中执行 case-statement

在 MongoDB 上分片 GridFS

Mongodb错误:The positional operator did not find the match needed from the query

Mongodb 设计,嵌入与关系

Mongoid 不在查询中

MongoDB Compass timeouts超时