I have been following this tutorial on using GraphQL and it has told me to write this block of code in my src/index.js file:
const express = require('express');
const bodyParser = require('body-parser');
const {graphqlExpress, graphiqlExpress} = require('apollo-server-express');
const schema = require('./schema');
// 1
const connectMongo = require('./mongo-connector');
// 2
const start = async () => {
// 3
const mongo = await connectMongo();
var app = express();
app.use('/graphql', bodyParser.json(), graphqlExpress({
context: {mongo}, // 4
schema
}));
app.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
}));
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Hackernews GraphQL server running on port ${PORT}.`)
});
};
// 5
start();
Though when I try to run the code using: node ./src/index.js it gives me this error:
const start = async () => {
^
SyntaxError: Unexpected token (
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:389:7)
at startup (bootstrap_node.js:149:9)
I've searched online and it seems that if might be caused by the node.js version from here but I've checked my noed.js version and it's 8.3.0 so it should be supported without having to use Babel if I'm not mistaken.
Here is my package.json file:
{
"name": "graphql-js-tutorial",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"apollo-server-express": "^1.1.2",
"body-parser": "^1.17.2",
"express": "^4.15.4",
"graphql": "^0.11.2",
"graphql-tools": "^1.2.2",
"mongodb": "^2.2.31"
}
}
async functions are only available since node 8.3
your code is equivalent to (without async/await)
const start = () => {
return connectMongo().then(mongo => {
var app = express();
app.use('/graphql', bodyParser.json(), graphqlExpress({
context: {mongo}, // 4
schema
}));
app.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
}));
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Hackernews GraphQL server running on port ${PORT}.`)
});
return;
});
};
start your app by the command node yourAppFile -harmony!
async function is available in the harmony mode under Node7.+
Related
I am learning Node.js (Node.js v18.12.1) and started building my first server (backend app).
here is the code
const express = requrie("express");
const app = express();
const port = 3000;
app.get("/", function (req, res) {
res.sendFile("index.html");
});
app.listen(port, function () {
console.log("Server is running on 3000");
});
However, I am getting the following error when I provide the command node app.js in terminal
const express = requrie("express");
^
ReferenceError: requrie is not defined
at Object.<anonymous> (C:\Users\harsh\OneDrive\Documents\Visual Studio 2022\Web Development\firstNodeServer\app.js:3:17)
at Module._compile (node:internal/modules/cjs/loader:1159:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1213:10)
at Module.load (node:internal/modules/cjs/loader:1037:32)
at Module._load (node:internal/modules/cjs/loader:878:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Also this is my package.json
{
"name": "firstnodeserver",
"version": "1.0.0",
"description": "This is my First Node Server",
"main": "app.js",
"type": "commonjs",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Harshad Tekwani",
"license": "ISC",
"dependencies": {
"express": "^4.18.2",
"jshint": "^2.13.6",
"nodemon": "^2.0.20"
}
}
Please help me with respect to resolving this error.
I was trying to run the server at localhost:3000 which should have given me on my home route the index.html but instead I am getting the above error.
require is Correct Not requrie
When I run npm start
My result is ..
> nodefirebase_curd#1.0.0 start
> nodemon index.js
[nodemon] 2.0.13
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node index.js`
internal/modules/cjs/loader.js:905
throw err;
^
Error: Cannot find module 'cors'
Require stack:
- C:\Users\tong1\Desktop\test-Firebase\nodeFirebase_CURD\index.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
at Function.Module._load (internal/modules/cjs/loader.js:746:27)
at Module.require (internal/modules/cjs/loader.js:974:19)
at require (internal/modules/cjs/helpers.js:92:18)
at Object.<anonymous> (C:\Users\tong1\Desktop\test-Firebase\nodeFirebase_CURD\index.js:3:14)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'C:\\Users\\tong1\\Desktop\\test-Firebase\\nodeFirebase_CURD\\index.js'
]
}
What wrong with this. I try to fix cors function but it doesn't work.
'use strict';
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const config = require('./config');
const studentRoutes = require('./routes/student-routes');
const app = express()
app.use(express.json());
app.use(cors());
app.use(bodyParser.json());
app.use('./api', studentRoutes.routes);
app.listen(config.port, () => console.log('App is listening on url http://localhost:' + config.port));
This is my package.json.
{
"name": "nodefirebase_curd",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "nodemon index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.19.0",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"firebase": "^9.1.0",
"firebase-admin": "^9.12.0"
},
"devDependencies": {
"nodemon": "^2.0.13"
}
}
I'm struck in this problem with a long time.
Can you help me, please.
Thank you so much.
you don't have cors in dependencies
Install the dependency by npm i cors -P
I am working on an app where I have to connect and perform queries on an SQL server using Sequelize. I have created migrations, seeders, and models using sequelize init but now when I tried to create an object of models using const db = require("./models") it is throwing error like
D:\Code Practice\express-sequelize-demo\node_modules\tedious\lib\token\stream-parser.js:85
static async *parseTokens(iterable, debug, options, colMetadata = []){
SyntaxError: Unexpected token *
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\Code Practice\express-sequelize-demo\node_modules\tedious\lib\token\token-stream-parser.js:10:44)
Files I created
package.json
{
"name": "express-sequelize-demo",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "nodemon app.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"mssql": "^7.1.0",
"sequelize": "^6.6.2",
"tedious": "^11.0.9"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
}
app.js
const express = require("express");
const app = express();
const PORT = 8088;
// throwing error here after importing
const db = require("./models");
app.get("/users", (req, res) => {
res.send({
status: 1,
message: "Hello from User",
});
});
app.get("/", (req, res) => {
res.send({
status: 1,
message: "Welcome to Home Page",
});
});
app.listen(PORT, () => {
console.log(`App is running on ${PORT}`);
});
models/index.js
"use strict";
const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/config.json")[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
console.log(sequelize);
}
fs.readdirSync(__dirname)
.filter((file) => {
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach((file) => {
const model = require(path.join(__dirname, file))(
sequelize,
Sequelize.DataTypes
);
db[model.name] = model;
});
Object.keys(db).forEach((modelName) => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
models/user.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
// define association here
}
};
User.init({
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
bio: DataTypes.TEXT
}, {
sequelize,
modelName: 'User',
});
return User;
};
5)config.json
{
"development": {
"username": "SA",
"password": "Password123",
"database": "database_development",
"host": "localhost",
"dialect": "mssql"
},
"test": {
"username": "root",
"password": "Password123",
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mssql"
},
"production": {
"username": "root",
"password": "Password123",
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mssql"
}
}
I have resolved this issue by updating the node version.
Here the issue was when I try to create sequelize instances using
const sequelize = new Sequelize(DB connection params); //pass the actual db config
it was throwing that error.
SyntaxError: Unexpected token *
But after some research, I updated my node version from 8.11.4 to 14.17.0 and it worked. Now without any error, I can run my application and it is working as expected.
I'm over a month into development of a MEVN app with MySQL. I'm using a framework called MEVN-CLI but that shouldn't really matter.
I keep having to change my server port ever few days whenever I get this error:
[nodemon] 2.0.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,html,css,json,md
[nodemon] starting `node run server.js --port 9000/api --open`
events.js:288
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1309:16)
at listenInCluster (net.js:1357:12)
at Server.listen (net.js:1445:7)
at Function.listen (C:\Dev\Projects\node-mysql\server\node_modules\express\lib\application.js:618:24)
at Object.<anonymous> (C:\Dev\Projects\node-mysql\server\server.js:258:5)
at Module._compile (internal/modules/cjs/loader.js:1158:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
at Module.load (internal/modules/cjs/loader.js:1002:32)
at Function.Module._load (internal/modules/cjs/loader.js:901:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
Emitted 'error' event on Server instance at:
at emitErrorNT (net.js:1336:8)
at processTicksAndRejections (internal/process/task_queues.js:84:21) {
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '::',
port: 3000
}
I change between 9000, 3000, 3002, 8000, etc. I want to keep it on a single port but this keeps happening and I can't find what's causing it.
I have a client and a server, they communicate with Axios, my Server communicates with a MySQL server I host elsewhere but I also think this is irrelevant but I figure it can't hurt to share that.
Here is my server:
const port = process.env.PORT || 4000;
const env = require("./env.json");
const express = require("express");
const mysql = require("mysql");
const path = require("path");
const bodyParser = require("body-parser");
const favicon = require("serve-favicon");
const app = express();
const cors = require("cors");
const {
testColumns,
showUsers,
searchResultColumns,
showAccountColumns
} = require("./mysql/columns");
app.use(bodyParser.json());
app.use(favicon(path.join(__dirname, "public", "favicon.ico")));
app.use(cors());
//* Build MySQL Connection
const db = mysql.createConnection({
host: env.server,
user: env.user,
password: env.pass,
database: env.schema
});
//* Connect to Database
db.connect((err) => {
if (err) {
console.log("Error Connecting:", err);
}
console.log("MySQL Connected...");
});
app.get(`/api/v1/:query/:x`, (req, res) => {
[Business Logic - Works fine]
if (err) {
// If error
console.log(err);
}
// If no results
else if (results == 0) {
res.send(`No Results\n ${results} \n - ${err}`);
return;
}
// If successful
res.send(results);
});
});
app.get(`/api/v1/:query/`, (req, res) => {
[Business Logic - Works fine]
if (err) {
// If error
console.log(err);
}
// If no results
else if (results == 0) {
res.send(`No Results\n ${results} \n - ${err}`);
return;
}
// If successful
res.send(results);
});
});
//* Root Handler
app.get("/", (req, res) =>
res.sendFile(path.join(__dirname + "/public/index.html"))
);
//? Error Handler
app.get("/404", (req, res) =>
res.sendFile(path.join(__dirname + "/public/404.html"))
);
//! Error Handler
app.get("/sample", (req, res) =>
res.sendFile(path.join(__dirname + "/public/sample.html"))
);
//? Listen for server port
app.listen(port, () => {
console.log(`Sample Dev Server at:${port}`);
});
I deleted some stuff that's not really relevant because it was hundreds of similar lines, I haven't abstracted my routing away yet.
This is my router:
import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";
import NotFound from "./views/NotFound.vue";
Vue.use(Router);
export default new Router({
mode: "history",
base: process.env.BASE_URL,
routes: [
{
path: "/",
name: "Home",
component: Home
},
{
path: "/NotFound",
name: NotFound,
component: () => import("./views/NotFound.vue")
},
{
path: "/search",
component: searchPage,
children: [
{ path: "/search/byName", component: searchByName },
{ path: "/search/china", component: searchByNumber }
]
}
]
});
And if it's relevant, this is my packages.json file:
{
"name": "vmax",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^0.19.2",
"core-js": "^3.6.4",
"vue": "^2.6.11",
"vue-router": "^3.1.6",
"vuetify": "^2.2.11"
},
"devDependencies": {
"#vue/cli-plugin-babel": "~4.3.0",
"#vue/cli-plugin-eslint": "~4.3.0",
"#vue/cli-service": "~4.3.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"sass": "^1.19.0",
"sass-loader": "^8.0.0",
"vue-cli-plugin-vuetify": "~2.0.5",
"vue-template-compiler": "^2.6.11",
"vuetify-loader": "^1.3.0"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
I changed just now to port 4000 and it's working just find but something is wrong that's causing me to have to change server ports every few days.
Probably the PORT is in use.
To terminate program PORT,
$ killall -9 node
Node / Express: EADDRINUSE, Address already in use happens when closing VS Code, particularly on Windows when a server is running with WSL.
I'm currently using something called CurrPorts which is free to view which ports are in use, and force close them.
To be clear, it's not specific to Windows or WSL, but that is where it seems most prevalent. If you're in the habit of using port 3000, 5500, or 8080 for example - it's likely in use by Node.
Add this in your "package.json" file
"stop-win": "Taskkill /IM node.exe /F",
"stop-linux": "killall node"
I followed a few video tutorials (such as this one and this one), which use a very similar code, which throws up an error.
My files:
package.json
{
"name": "steamcmd-gui",
"version": "0.0.1",
"author": "avi12",
"main": "main.js",
"scripts": {
"start": "electron ."
},
"dependencies": {
"electron": "^1.7.5"
}
}
main.js
const electron = require("electron");
const url = require("url");
const path = require("path");
let win;
function createWindow() {
win = new electron.BrowserWindow();
win.loadURL(url.format({
pathname: path.join(__dirname, "index.html"),
protocol: "file",
slashes: true
});
);
win.on("closed", () => win = null);
electron.app.on("ready", createWindow);
electron.app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
When trying to execute main.js, the debugger throws:
TypeError: Cannot read property 'on' of undefined
at Object.<anonymous> (C:\Users\avi12\OneDrive\Documents\WebStorm\SteamCMD GUI\main.js:18:13)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:389:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:504:3
Which means that electron.app is undefined for some reason.
Thanks a lot for helping!
Thanks to Fast Snail, who realized that I should execute my main.js using electron main.js - I looked up in Google for a solution and found this very nice tutorial, which solved my problem.
The thing was that I had to specify some extra configurations in order to execute my script using Electron, from JetBrains WebStorm.
Thanks a lot!